Micron Document
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| SparkN0de-git | SparkN0de |
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


Displaying Raw • Download


meshchatx/src/frontend/components/call/CallPage.vue 7d7cd7d48701e74ab38cef0db1eca1b0cd23cf87 (7d7cd7d4) Text, 200.72 KB

Tb4b4b4<Tff7b72templateTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex flex-col w-full h-full bg-gray-100 dark:bg-zinc-950"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"w-full h-full overflow-y-auto"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"mx-auto w-full max-w-4xl p-4 md:p-6 flex-1 flex flex-col min-h-full"Tb4b4b4>
T8b949e<!-- Tabs -->
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex flex-wrap justify-center border-b border-gray-200 dark:border-zinc-800 mb-6 shrink-0"Tb4b4b4>
Tb4b4b4<Tff7b72button
Tb4b4b4:Te6edf3classTff7b72=Ta5d6ff"Tb4b4b4[
Te6edf3activeTab Tff7b72=== Ta5d6ff'phone'
Tff7b72? Ta5d6ff'border-blue-500 text-blue-600 dark:text-blue-400'
Tff7b72: Ta5d6ff'border-transparent text-gray-500 hover:text-gray-700 dark:text-zinc-400 dark:hover:text-zinc-200 hover:border-gray-300'Tb4b4b4,
Tb4b4b4]Ta5d6ff"
Te6edf3classTff7b72=Ta5d6ff"py-2 px-4 border-b-2 font-medium text-sm transition-all"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3activeTab Tff7b72= Ta5d6ff'phone'Ta5d6ff"
Tb4b4b4>
Phone
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tff7b72button
Tb4b4b4:Te6edf3classTff7b72=Ta5d6ff"Tb4b4b4[
Te6edf3activeTab Tff7b72=== Ta5d6ff'phonebook'
Tff7b72? Ta5d6ff'border-blue-500 text-blue-600 dark:text-blue-400'
Tff7b72: Ta5d6ff'border-transparent text-gray-500 hover:text-gray-700 dark:text-zinc-400 dark:hover:text-zinc-200 hover:border-gray-300'Tb4b4b4,
Tb4b4b4]Ta5d6ff"
Te6edf3classTff7b72=Ta5d6ff"py-2 px-4 border-b-2 font-medium text-sm transition-all"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3activeTab Tff7b72= Ta5d6ff'phonebook'Ta5d6ff"
Tb4b4b4>
Phonebook
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tff7b72button
Tb4b4b4:Te6edf3classTff7b72=Ta5d6ff"Tb4b4b4[
Te6edf3activeTab Tff7b72=== Ta5d6ff'voicemail'
Tff7b72? Ta5d6ff'border-blue-500 text-blue-600 dark:text-blue-400'
Tff7b72: Ta5d6ff'border-transparent text-gray-500 hover:text-gray-700 dark:text-zinc-400 dark:hover:text-zinc-200 hover:border-gray-300'Tb4b4b4,
Tb4b4b4]Ta5d6ff"
Te6edf3classTff7b72=Ta5d6ff"py-2 px-4 border-b-2 font-medium text-sm flex items-center gap-2 transition-all"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3activeTab Tff7b72= Ta5d6ff'voicemail'Ta5d6ff"
Tb4b4b4>
Voicemail
Tb4b4b4<Tff7b72span
Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3unreadVoicemailsCount Tff7b72> T79c0ff0Ta5d6ff"
Te6edf3classTff7b72=Ta5d6ff"bg-red-500 text-white text-[10px] px-1.5 py-0.5 rounded-full animate-pulse"
Tb4b4b4>Tff7b72{{ Te6edf3unreadVoicemailsCount Tff7b72}}Tb4b4b4<Tb4b4b4/Tff7b72span
Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tff7b72button
Tb4b4b4:Te6edf3classTff7b72=Ta5d6ff"Tb4b4b4[
Te6edf3activeTab Tff7b72=== Ta5d6ff'contacts'
Tff7b72? Ta5d6ff'border-blue-500 text-blue-600 dark:text-blue-400'
Tff7b72: Ta5d6ff'border-transparent text-gray-500 hover:text-gray-700 dark:text-zinc-400 dark:hover:text-zinc-200 hover:border-gray-300'Tb4b4b4,
Tb4b4b4]Ta5d6ff"
Te6edf3classTff7b72=Ta5d6ff"py-2 px-4 border-b-2 font-medium text-sm transition-all"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3activeTab Tff7b72= Ta5d6ff'contacts'Ta5d6ff"
Tb4b4b4>
Contacts
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tff7b72button
Tb4b4b4:Te6edf3classTff7b72=Ta5d6ff"Tb4b4b4[
Te6edf3activeTab Tff7b72=== Ta5d6ff'ringtone'
Tff7b72? Ta5d6ff'border-blue-500 text-blue-600 dark:text-blue-400'
Tff7b72: Ta5d6ff'border-transparent text-gray-500 hover:text-gray-700 dark:text-zinc-400 dark:hover:text-zinc-200 hover:border-gray-300'Tb4b4b4,
Tb4b4b4]Ta5d6ff"
Te6edf3classTff7b72=Ta5d6ff"py-2 px-4 border-b-2 font-medium text-sm transition-all"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3activeTab Tff7b72= Ta5d6ff'ringtone'Ta5d6ff"
Tb4b4b4>
Tff7b72{{ Te6edf3$tTb4b4b4(Ta5d6ff"call.ringtone"Tb4b4b4) Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
T8b949e<!-- <button
:class="[
activeTab === 'recordings'
? 'border-blue-500 text-blue-600 dark:text-blue-400'
: 'border-transparent text-gray-500 hover:text-gray-700 dark:text-zinc-400 dark:hover:text-zinc-200 hover:border-gray-300',
]"
class="py-2 px-4 border-b-2 font-medium text-sm transition-all"
@click="activeTab = 'recordings'"
>
{{ $t("call.recordings") }}
</button> -->
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>

T8b949e<!-- Phone Tab -->
Tb4b4b4<Tff7b72div Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3activeTab Tff7b72=== Ta5d6ff'phone'Ta5d6ff" Te6edf3classTff7b72=Ta5d6ff"flex-1 flex flex-col"Tb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3activeCall Tff7b72|| Te6edf3isCallEnded Tff7b72|| Te6edf3initiationStatusTa5d6ff"
Te6edf3classTff7b72=Ta5d6ff"flex-1 flex flex-col items-center justify-center py-12 px-4"
Tb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3classTff7b72=Ta5d6ff"glass-card w-full max-w-md !p-8 flex flex-col items-center text-center relative overflow-hidden"
Tb4b4b4>
T8b949e<!-- Status pulse background -->
Tb4b4b4<Tff7b72div
Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3activeCall Tff7b72&& Te6edf3activeCallTb4b4b4.Te6edf3status Tff7b72=== T79c0ff6Ta5d6ff"
Te6edf3classTff7b72=Ta5d6ff"absolute inset-0 bg-green-500/5 animate-pulse"
Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>

T8b949e<!-- Recording indicator -->
Tb4b4b4<Tff7b72div
Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3activeCall Tff7b72&& Te6edf3activeCallTb4b4b4.Te6edf3is_recordingTa5d6ff"
Te6edf3classTff7b72=Ta5d6ff"absolute top-4 right-4 z-20 flex items-center gap-1.5 px-2 py-1 bg-red-500/10 rounded-full border border-red-500/20"
Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"size-2 bg-red-500 rounded-full animate-pulse"Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"text-[10px] font-bold text-red-500 uppercase tracking-wider"
Tb4b4b4>RecordingTb4b4b4<Tb4b4b4/Tff7b72span
Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>

Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"relative mb-8"Tb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3classTff7b72=Ta5d6ff"size-32 mx-auto bg-gray-100 dark:bg-zinc-800 rounded-full flex items-center justify-center border-4 border-white dark:border-zinc-900 shadow-2xl relative z-10"
Tb4b4b4:Te6edf3classTff7b72=Ta5d6ff"Tb4b4b4{
Ta5d6ff'ring-4 ring-blue-500/20 animate-pulse'Tff7b72: Te6edf3activeCall Tff7b72&& Te6edf3activeCallTb4b4b4.Te6edf3status Tff7b72=== T79c0ff4Tb4b4b4,
Tb4b4b4}Ta5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72LxmfUserIcon
Tb4b4b4:Te6edf3custom-imageTff7b72=Ta5d6ff"Tb4b4b4(Te6edf3activeCall Tff7b72|| Te6edf3lastCallTb4b4b4)Tff7b72?Tb4b4b4.Te6edf3custom_imageTa5d6ff"
Tb4b4b4:Te6edf3icon-nameTff7b72=Ta5d6ff"
Tb4b4b4(Te6edf3activeCall Tff7b72|| Te6edf3lastCallTb4b4b4)Tff7b72?Tb4b4b4.Te6edf3remote_icon
Tff7b72? Tb4b4b4(Te6edf3activeCall Tff7b72|| Te6edf3lastCallTb4b4b4)Tb4b4b4.Te6edf3remote_iconTb4b4b4.Te6edf3icon_name
Tff7b72: Ta5d6ff''
Ta5d6ff"
Tb4b4b4:Te6edf3icon-foreground-colourTff7b72=Ta5d6ff"
Tb4b4b4(Te6edf3activeCall Tff7b72|| Te6edf3lastCallTb4b4b4)Tff7b72?Tb4b4b4.Te6edf3remote_icon
Tff7b72? Tb4b4b4(Te6edf3activeCall Tff7b72|| Te6edf3lastCallTb4b4b4)Tb4b4b4.Te6edf3remote_iconTb4b4b4.Te6edf3foreground_colour
Tff7b72: Ta5d6ff''
Ta5d6ff"
Tb4b4b4:Te6edf3icon-background-colourTff7b72=Ta5d6ff"
Tb4b4b4(Te6edf3activeCall Tff7b72|| Te6edf3lastCallTb4b4b4)Tff7b72?Tb4b4b4.Te6edf3remote_icon
Tff7b72? Tb4b4b4(Te6edf3activeCall Tff7b72|| Te6edf3lastCallTb4b4b4)Tb4b4b4.Te6edf3remote_iconTb4b4b4.Te6edf3background_colour
Tff7b72: Ta5d6ff''
Ta5d6ff"
Te6edf3icon-classTff7b72=Ta5d6ff"size-28"
Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>

Tb4b4b4<Tff7b72div
Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3activeCall Tff7b72&& Te6edf3activeCallTb4b4b4.Te6edf3status Tff7b72=== T79c0ff6Ta5d6ff"
Te6edf3classTff7b72=Ta5d6ff"absolute -bottom-2 -right-2 bg-green-500 text-white p-2 rounded-full shadow-lg border-4 border-white dark:border-zinc-900 z-20"
Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"phone-in-talk" Te6edf3classTff7b72=Ta5d6ff"size-5" Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>

Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"relative z-10 space-y-1 mb-8"Tb4b4b4>
Tb4b4b4<Tff7b72h2 Te6edf3classTff7b72=Ta5d6ff"text-2xl font-bold text-gray-900 dark:text-white truncate max-w-[280px]"Tb4b4b4>
Tff7b72{{
Tb4b4b4(Te6edf3activeCall Tff7b72|| Te6edf3lastCallTb4b4b4)Tff7b72?Tb4b4b4.Te6edf3remote_identity_name Tff7b72||
Te6edf3initiationTargetName Tff7b72||
Te6edf3$tTb4b4b4(Ta5d6ff"call.unknown"Tb4b4b4)
Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72h2Tb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3v-ifTff7b72=Ta5d6ff"Tb4b4b4(Te6edf3activeCall Tff7b72|| Te6edf3lastCallTb4b4b4)Tff7b72?Tb4b4b4.Te6edf3remote_identity_hash Tff7b72|| Te6edf3initiationTargetHashTa5d6ff"
Te6edf3classTff7b72=Ta5d6ff"text-xs font-mono text-gray-400 dark:text-zinc-500 tracking-wider"
Tb4b4b4>
Tff7b72{{
Te6edf3formatDestinationHashTb4b4b4(
Tb4b4b4(Te6edf3activeCall Tff7b72|| Te6edf3lastCallTb4b4b4)Tff7b72?Tb4b4b4.Te6edf3remote_identity_hash Tff7b72|| Te6edf3initiationTargetHash
Tb4b4b4)
Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3v-ifTff7b72=Ta5d6ff"Tb4b4b4(Te6edf3activeCall Tff7b72|| Te6edf3lastCallTb4b4b4)Tff7b72?Tb4b4b4.Te6edf3is_contact Tff7b72|| Tff7b72!Tff7b72!Te6edf3initiationTargetNameTa5d6ff"
Te6edf3classTff7b72=Ta5d6ff"inline-flex items-center gap-1 px-2 py-0.5 bg-blue-50 dark:bg-blue-900/30 text-blue-600 dark:text-blue-400 text-[10px] font-bold rounded-full uppercase tracking-wider"
Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"check-decagram" Te6edf3classTff7b72=Ta5d6ff"size-3" Tb4b4b4/Tb4b4b4>
Contact
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>

T8b949e<!-- call status -->
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"relative z-10 mb-8"Tb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3classTff7b72=Ta5d6ff"px-4 py-2 bg-gray-50 dark:bg-zinc-800/50 rounded-2xl inline-block border border-gray-100 dark:border-zinc-800"
Tb4b4b4>
Tb4b4b4<Tff7b72template Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3wasDeclinedTa5d6ff"Tb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"text-red-500 font-bold text-sm"Tb4b4b4>Tff7b72{{
Te6edf3$tTb4b4b4(Ta5d6ff"call.call_declined"Tb4b4b4)
Tff7b72}}Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72templateTb4b4b4>
Tb4b4b4<Tff7b72template Te6edf3v-else-ifTff7b72=Ta5d6ff"Te6edf3isCallEndedTa5d6ff"Tb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"text-gray-500 dark:text-zinc-400 font-bold text-sm"Tb4b4b4>Tff7b72{{
Te6edf3$tTb4b4b4(Ta5d6ff"call.call_ended"Tb4b4b4)
Tff7b72}}Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72templateTb4b4b4>
Tb4b4b4<Tff7b72template Te6edf3v-else-ifTff7b72=Ta5d6ff"Te6edf3activeCallTa5d6ff"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex flex-col items-center"Tb4b4b4>
Tb4b4b4<Tff7b72span
Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3activeCallTb4b4b4.Te6edf3is_voicemailTa5d6ff"
Te6edf3classTff7b72=Ta5d6ff"text-red-500 font-bold text-sm animate-pulse flex items-center gap-2"
Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"record" Te6edf3classTff7b72=Ta5d6ff"size-4" Tb4b4b4/Tb4b4b4>
Tff7b72{{ Te6edf3$tTb4b4b4(Ta5d6ff"call.recording_voicemail"Tb4b4b4) Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span
Te6edf3v-else-ifTff7b72=Ta5d6ff"
Te6edf3activeCall Tff7b72&& Te6edf3activeCallTb4b4b4.Te6edf3is_incoming Tff7b72&& Te6edf3activeCallTb4b4b4.Te6edf3status Tff7b72=== T79c0ff4
Ta5d6ff"
Te6edf3classTff7b72=Ta5d6ff"text-blue-600 dark:text-blue-400 font-bold text-sm animate-bounce"
Tb4b4b4>Tff7b72{{ Te6edf3$tTb4b4b4(Ta5d6ff"call.incoming_call"Tb4b4b4) Tff7b72}}Tb4b4b4<Tb4b4b4/Tff7b72span
Tb4b4b4>
Tb4b4b4<Tff7b72span
Te6edf3v-else
Te6edf3classTff7b72=Ta5d6ff"text-gray-700 dark:text-zinc-300 font-bold text-sm flex items-center gap-2"
Tb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3activeCall Tff7b72&& Te6edf3activeCallTb4b4b4.Te6edf3status Tff7b72=== T79c0ff0Ta5d6ff"Tb4b4b4>Busy...Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span
Te6edf3v-else-ifTff7b72=Ta5d6ff"Te6edf3activeCall Tff7b72&& Te6edf3activeCallTb4b4b4.Te6edf3status Tff7b72=== T79c0ff1Ta5d6ff"
Te6edf3classTff7b72=Ta5d6ff"text-red-500"
Tb4b4b4>RejectedTb4b4b4<Tb4b4b4/Tff7b72span
Tb4b4b4>
Tb4b4b4<Tff7b72span
Te6edf3v-else-ifTff7b72=Ta5d6ff"Te6edf3activeCall Tff7b72&& Te6edf3activeCallTb4b4b4.Te6edf3status Tff7b72=== T79c0ff2Ta5d6ff"
Te6edf3classTff7b72=Ta5d6ff"animate-pulse"
Tb4b4b4>Calling...Tb4b4b4<Tb4b4b4/Tff7b72span
Tb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3v-else-ifTff7b72=Ta5d6ff"Te6edf3activeCall Tff7b72&& Te6edf3activeCallTb4b4b4.Te6edf3status Tff7b72=== T79c0ff3Ta5d6ff"Tb4b4b4>AvailableTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span
Te6edf3v-else-ifTff7b72=Ta5d6ff"Te6edf3activeCall Tff7b72&& Te6edf3activeCallTb4b4b4.Te6edf3status Tff7b72=== T79c0ff4Ta5d6ff"
Te6edf3classTff7b72=Ta5d6ff"animate-pulse"
Tb4b4b4>Ringing...Tb4b4b4<Tb4b4b4/Tff7b72span
Tb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3v-else-ifTff7b72=Ta5d6ff"Te6edf3activeCall Tff7b72&& Te6edf3activeCallTb4b4b4.Te6edf3status Tff7b72=== T79c0ff5Ta5d6ff"
Tb4b4b4>Connecting...Tb4b4b4<Tb4b4b4/Tff7b72span
Tb4b4b4>
Tb4b4b4<Tff7b72span
Te6edf3v-else-ifTff7b72=Ta5d6ff"Te6edf3activeCall Tff7b72&& Te6edf3activeCallTb4b4b4.Te6edf3status Tff7b72=== T79c0ff6Ta5d6ff"
Te6edf3classTff7b72=Ta5d6ff"text-green-500 flex items-center gap-2"
Tb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"size-2 bg-green-500 rounded-full animate-ping"Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Connected
Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3v-else-ifTff7b72=Ta5d6ff"Te6edf3activeCallTa5d6ff"Tb4b4b4>Status: Tff7b72{{ Te6edf3activeCallTb4b4b4.Te6edf3status Tff7b72}}Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

T8b949e<!-- Duration -->
Tb4b4b4<Tff7b72div
Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3activeCall Tff7b72&& Te6edf3activeCallTb4b4b4.Te6edf3status Tff7b72=== T79c0ff6 Tff7b72&& Te6edf3elapsedTimeTa5d6ff"
Te6edf3classTff7b72=Ta5d6ff"text-xs font-mono text-gray-400 dark:text-zinc-500 mt-1"
Tb4b4b4>
Tff7b72{{ Te6edf3elapsedTime Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72templateTb4b4b4>
Tb4b4b4<Tff7b72template Te6edf3v-else-ifTff7b72=Ta5d6ff"Te6edf3initiationStatusTa5d6ff"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex flex-col items-center"Tb4b4b4>
Tb4b4b4<Tff7b72span
Te6edf3classTff7b72=Ta5d6ff"text-blue-600 dark:text-blue-400 font-bold text-sm animate-pulse"
Tb4b4b4>
Tff7b72{{ Te6edf3initiationStatus Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72templateTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3isCallEnded Tff7b72&& Te6edf3callDurationTa5d6ff"
Te6edf3classTff7b72=Ta5d6ff"text-xs font-mono text-gray-400 dark:text-zinc-500 mt-2"
Tb4b4b4>
Duration: Tff7b72{{ Te6edf3callDuration Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
T8b949e<!-- Play Voicemail Button -->
Tb4b4b4<Tff7b72div Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3isCallEnded Tff7b72&& Te6edf3wasVoicemailTa5d6ff" Te6edf3classTff7b72=Ta5d6ff"mt-6 animate-fade-in"Tb4b4b4>
Tb4b4b4<Tff7b72button
Te6edf3typeTff7b72=Ta5d6ff"button"
Te6edf3classTff7b72=Ta5d6ff"px-6 py-3 rounded-full bg-blue-500 hover:bg-blue-600 text-white font-bold flex items-center gap-2 shadow-lg shadow-blue-500/30 transition-all hover:scale-105"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3playLatestVoicemailTa5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon
Tb4b4b4:Te6edf3icon-nameTff7b72=Ta5d6ff"Te6edf3playingVoicemailId Tff7b72? Ta5d6ff'stop' Tff7b72: Ta5d6ff'play'Ta5d6ff"
Te6edf3classTff7b72=Ta5d6ff"size-6"
Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tff7b72spanTb4b4b4>Tff7b72{{ Te6edf3playingVoicemailId Tff7b72? Ta5d6ff"Stop" Tff7b72: Ta5d6ff"Play Voicemail" Tff7b72}}Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>

T8b949e<!-- settings during connected call -->
Tb4b4b4<Tff7b72div Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3activeCall Tff7b72&& Te6edf3activeCallTb4b4b4.Te6edf3status Tff7b72=== T79c0ff6Ta5d6ff" Te6edf3classTff7b72=Ta5d6ff"w-full relative z-10 mb-8"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex flex-col gap-4"Tb4b4b4>
Tb4b4b4<Tff7b72select
Te6edf3v-modelTff7b72=Ta5d6ff"Te6edf3selectedAudioProfileIdTa5d6ff"
Te6edf3classTff7b72=Ta5d6ff"input-field !rounded-xl !py-2 shadow-sm"
Tb4b4b4@Te6edf3changeTff7b72=Ta5d6ff"Te6edf3switchAudioProfileTb4b4b4(Te6edf3selectedAudioProfileIdTb4b4b4)Ta5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72option
Te6edf3v-forTff7b72=Ta5d6ff"Te6edf3audioProfile Tff7b72in Te6edf3audioProfilesTa5d6ff"
Tb4b4b4:Te6edf3keyTff7b72=Ta5d6ff"Te6edf3audioProfileTb4b4b4.Te6edf3idTa5d6ff"
Tb4b4b4:Te6edf3valueTff7b72=Ta5d6ff"Te6edf3audioProfileTb4b4b4.Te6edf3idTa5d6ff"
Tb4b4b4>
Tff7b72{{ Te6edf3audioProfileTb4b4b4.Te6edf3name Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72optionTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72selectTb4b4b4>

Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex justify-center gap-4"Tb4b4b4>
T8b949e<!-- mute/unmute mic -->
Tb4b4b4<Tff7b72button
Te6edf3typeTff7b72=Ta5d6ff"button"
Tb4b4b4:Te6edf3classTff7b72=Ta5d6ff"Tb4b4b4[
Te6edf3isMicMuted
Tff7b72? Ta5d6ff'bg-red-500 text-white shadow-red-500/20'
Tff7b72: Ta5d6ff'bg-gray-100 dark:bg-zinc-800 text-gray-700 dark:text-zinc-200 hover:bg-gray-200 dark:hover:bg-zinc-700 shadow-gray-200/20 dark:shadow-black/20'Tb4b4b4,
Tb4b4b4]Ta5d6ff"
Te6edf3classTff7b72=Ta5d6ff"p-4 rounded-full shadow-lg transition-all duration-200"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3toggleMicrophoneTa5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon
Tb4b4b4:Te6edf3icon-nameTff7b72=Ta5d6ff"Te6edf3isMicMuted Tff7b72? Ta5d6ff'microphone-off' Tff7b72: Ta5d6ff'microphone'Ta5d6ff"
Te6edf3classTff7b72=Ta5d6ff"size-6"
Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>

T8b949e<!-- mute/unmute speaker -->
Tb4b4b4<Tff7b72button
Te6edf3typeTff7b72=Ta5d6ff"button"
Tb4b4b4:Te6edf3classTff7b72=Ta5d6ff"Tb4b4b4[
Te6edf3isSpeakerMuted
Tff7b72? Ta5d6ff'bg-red-500 text-white shadow-red-500/20'
Tff7b72: Ta5d6ff'bg-gray-100 dark:bg-zinc-800 text-gray-700 dark:text-zinc-200 hover:bg-gray-200 dark:hover:bg-zinc-700 shadow-gray-200/20 dark:shadow-black/20'Tb4b4b4,
Tb4b4b4]Ta5d6ff"
Te6edf3classTff7b72=Ta5d6ff"p-4 rounded-full shadow-lg transition-all duration-200"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3toggleSpeakerTa5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon
Tb4b4b4:Te6edf3icon-nameTff7b72=Ta5d6ff"Te6edf3isSpeakerMuted Tff7b72? Ta5d6ff'volume-off' Tff7b72: Ta5d6ff'volume-high'Ta5d6ff"
Te6edf3classTff7b72=Ta5d6ff"size-6"
Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>

T8b949e<!-- toggle stats -->
Tb4b4b4<Tff7b72button
Te6edf3typeTff7b72=Ta5d6ff"button"
Tb4b4b4:Te6edf3classTff7b72=Ta5d6ff"Tb4b4b4[
Te6edf3isShowingStats
Tff7b72? Ta5d6ff'bg-blue-500 text-white shadow-blue-500/20'
Tff7b72: Ta5d6ff'bg-gray-100 dark:bg-zinc-800 text-gray-700 dark:text-zinc-200 hover:bg-gray-200 dark:hover:bg-zinc-700 shadow-gray-200/20 dark:shadow-black/20'Tb4b4b4,
Tb4b4b4]Ta5d6ff"
Te6edf3classTff7b72=Ta5d6ff"p-4 rounded-full shadow-lg transition-all duration-200"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3isShowingStats Tff7b72= Tff7b72!Te6edf3isShowingStatsTa5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"chart-bar" Te6edf3classTff7b72=Ta5d6ff"size-6" Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>

T8b949e<!-- actions -->
Tb4b4b4<Tff7b72div Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3activeCallTa5d6ff" Te6edf3classTff7b72=Ta5d6ff"w-full relative z-10 flex flex-col gap-3"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex gap-3"Tb4b4b4>
T8b949e<!-- answer call -->
Tb4b4b4<Tff7b72button
Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3activeCall Tff7b72&& Te6edf3activeCallTb4b4b4.Te6edf3is_incoming Tff7b72&& Te6edf3activeCallTb4b4b4.Te6edf3status Tff7b72=== T79c0ff4Ta5d6ff"
Te6edf3typeTff7b72=Ta5d6ff"button"
Te6edf3classTff7b72=Ta5d6ff"flex-1 flex items-center justify-center gap-2 rounded-2xl bg-green-600 py-4 text-sm font-bold text-white shadow-xl shadow-green-600/20 hover:bg-green-500 transition-all duration-200"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3answerCallTa5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"phone" Te6edf3classTff7b72=Ta5d6ff"size-5" Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tff7b72spanTb4b4b4>Tff7b72{{ Te6edf3$tTb4b4b4(Ta5d6ff"call.accept"Tb4b4b4) Tff7b72}}Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>

T8b949e<!-- send to voicemail -->
Tb4b4b4<Tff7b72button
Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3activeCall Tff7b72&& Te6edf3activeCallTb4b4b4.Te6edf3is_incoming Tff7b72&& Te6edf3activeCallTb4b4b4.Te6edf3status Tff7b72=== T79c0ff4Ta5d6ff"
Te6edf3typeTff7b72=Ta5d6ff"button"
Te6edf3classTff7b72=Ta5d6ff"flex-1 flex items-center justify-center gap-2 rounded-2xl bg-blue-600 py-4 text-sm font-bold text-white shadow-xl shadow-blue-600/20 hover:bg-blue-500 transition-all duration-200"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3sendToVoicemailTa5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"voicemail" Te6edf3classTff7b72=Ta5d6ff"size-5" Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tff7b72spanTb4b4b4>VoicemailTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>

T8b949e<!-- hangup/decline call -->
Tb4b4b4<Tff7b72button
Te6edf3typeTff7b72=Ta5d6ff"button"
Te6edf3classTff7b72=Ta5d6ff"w-full flex items-center justify-center gap-2 rounded-2xl bg-red-600 py-4 text-sm font-bold text-white shadow-xl shadow-red-600/20 hover:bg-red-500 transition-all duration-200"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3hangupCallTa5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"phone-hangup" Te6edf3classTff7b72=Ta5d6ff"size-5 rotate-[135deg]" Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tff7b72spanTb4b4b4>Tff7b72{{
Te6edf3activeCall Tff7b72&& Te6edf3activeCallTb4b4b4.Te6edf3is_incoming Tff7b72&& Te6edf3activeCallTb4b4b4.Te6edf3status Tff7b72=== T79c0ff4
Tff7b72? Te6edf3$tTb4b4b4(Ta5d6ff"call.decline"Tb4b4b4)
Tff7b72: Te6edf3$tTb4b4b4(Ta5d6ff"call.hangup"Tb4b4b4)
Tff7b72}}Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>

T8b949e<!-- stats -->
Tb4b4b4<Tff7b72div
Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3isShowingStats Tff7b72&& Te6edf3activeCallTa5d6ff"
Te6edf3classTff7b72=Ta5d6ff"w-full mt-6 p-4 text-left bg-gray-50 dark:bg-zinc-800/50 rounded-2xl text-[10px] text-gray-500 dark:text-zinc-400 font-mono border border-gray-100 dark:border-zinc-800 relative z-10"
Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"grid grid-cols-2 gap-4"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex flex-col gap-1"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex justify-between"Tb4b4b4>
Tb4b4b4<Tff7b72spanTb4b4b4>TX PktsTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72spanTb4b4b4>Tff7b72{{ Te6edf3activeCallTb4b4b4.Te6edf3tx_packets Tff7b72}}Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex justify-between"Tb4b4b4>
Tb4b4b4<Tff7b72spanTb4b4b4>TX DataTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72spanTb4b4b4>Tff7b72{{ Te6edf3formatBytesTb4b4b4(Te6edf3activeCallTb4b4b4.Te6edf3tx_bytesTb4b4b4) Tff7b72}}Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex flex-col gap-1"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex justify-between"Tb4b4b4>
Tb4b4b4<Tff7b72spanTb4b4b4>RX PktsTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72spanTb4b4b4>Tff7b72{{ Te6edf3activeCallTb4b4b4.Te6edf3rx_packets Tff7b72}}Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex justify-between"Tb4b4b4>
Tb4b4b4<Tff7b72spanTb4b4b4>RX DataTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72spanTb4b4b4>Tff7b72{{ Te6edf3formatBytesTb4b4b4(Te6edf3activeCallTb4b4b4.Te6edf3rx_bytesTb4b4b4) Tff7b72}}Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>

Tb4b4b4<Tff7b72div Te6edf3v-else Te6edf3classTff7b72=Ta5d6ff"space-y-6 my-6 max-w-3xl mx-auto w-full"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"glass-card"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex items-center gap-3 mb-6"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"bg-blue-100 dark:bg-blue-900/30 p-2.5 rounded-2xl"Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon
Te6edf3icon-nameTff7b72=Ta5d6ff"phone-plus"
Te6edf3classTff7b72=Ta5d6ff"size-6 text-blue-600 dark:text-blue-400"
Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72h2 Te6edf3classTff7b72=Ta5d6ff"text-lg font-bold text-gray-900 dark:text-white leading-tight"Tb4b4b4>
New Call
Tb4b4b4<Tb4b4b4/Tff7b72h2Tb4b4b4>
Tb4b4b4<Tff7b72p Te6edf3classTff7b72=Ta5d6ff"text-xs text-gray-500 dark:text-zinc-400"Tb4b4b4>Enter an identity to call.Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>

Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"space-y-4"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"relative"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex gap-2"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"relative flex-1"Tb4b4b4>
Tb4b4b4<Tff7b72input
Te6edf3v-modelTff7b72=Ta5d6ff"Te6edf3destinationHashTa5d6ff"
Te6edf3typeTff7b72=Ta5d6ff"text"
Te6edf3placeholderTff7b72=Ta5d6ff"Identity Hash or Name"
Te6edf3classTff7b72=Ta5d6ff"input-field"
Tb4b4b4@Te6edf3keydownTb4b4b4.Te6edf3enterTb4b4b4.Te6edf3preventTff7b72=Ta5d6ff"Te6edf3handleCallInputEnterTa5d6ff"
Tb4b4b4@Te6edf3keydownTb4b4b4.Te6edf3upTb4b4b4.Te6edf3preventTff7b72=Ta5d6ff"Te6edf3handleCallInputUpTa5d6ff"
Tb4b4b4@Te6edf3keydownTb4b4b4.Te6edf3downTb4b4b4.Te6edf3preventTff7b72=Ta5d6ff"Te6edf3handleCallInputDownTa5d6ff"
Tb4b4b4@Te6edf3focusTff7b72=Ta5d6ff"Te6edf3isCallInputFocused Tff7b72= Tff7b72trueTa5d6ff"
Tb4b4b4@Te6edf3blurTff7b72=Ta5d6ff"Te6edf3onCallInputBlurTa5d6ff"
Tb4b4b4/Tb4b4b4>
T8b949e<!-- Suggestions Dropdown -->
Tb4b4b4<Tff7b72div
Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3isCallInputFocused Tff7b72&& Te6edf3newCallSuggestionsTb4b4b4.Te6edf3length Tff7b72> T79c0ff0Ta5d6ff"
Te6edf3classTff7b72=Ta5d6ff"absolute z-50 left-0 right-0 mt-1 bg-white dark:bg-zinc-900 border border-gray-200 dark:border-zinc-800 rounded-xl shadow-xl overflow-hidden animate-in fade-in slide-in-from-top-2 duration-200"
Tb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3v-forTff7b72=Ta5d6ff"Tb4b4b4(Te6edf3suggestionTb4b4b4, Te6edf3indexTb4b4b4) Tff7b72in Te6edf3newCallSuggestionsTa5d6ff"
Tb4b4b4:Te6edf3keyTff7b72=Ta5d6ff"Te6edf3suggestionTb4b4b4.Te6edf3hashTa5d6ff"
Te6edf3classTff7b72=Ta5d6ff"px-4 py-2.5 flex items-center gap-3 cursor-pointer transition-colors"
Tb4b4b4:Te6edf3classTff7b72=Ta5d6ff"Tb4b4b4[
Te6edf3index Tff7b72=== Te6edf3selectedSuggestionIndex
Tff7b72? Ta5d6ff'bg-blue-50 dark:bg-blue-900/30 text-blue-600 dark:text-blue-400'
Tff7b72: Ta5d6ff'hover:bg-gray-50 dark:hover:bg-zinc-800/50 text-gray-700 dark:text-zinc-300'Tb4b4b4,
Tb4b4b4]Ta5d6ff"
Tb4b4b4@Te6edf3mousedownTb4b4b4.Te6edf3preventTff7b72=Ta5d6ff"Te6edf3selectSuggestionTb4b4b4(Te6edf3suggestionTb4b4b4)Ta5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3classTff7b72=Ta5d6ff"shrink-0 size-8 rounded-full flex items-center justify-center text-xs"
Tb4b4b4:Te6edf3classTff7b72=Ta5d6ff"
Te6edf3suggestionTb4b4b4.Te6edf3type Tff7b72=== Ta5d6ff'contact'
Tff7b72? Ta5d6ff'bg-blue-100 dark:bg-blue-900/40 text-blue-600'
Tff7b72: Ta5d6ff'bg-gray-100 dark:bg-zinc-800 text-gray-500'
Ta5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon
Tb4b4b4:Te6edf3icon-nameTff7b72=Ta5d6ff"Te6edf3suggestionTb4b4b4.Te6edf3iconTa5d6ff"
Te6edf3classTff7b72=Ta5d6ff"size-4"
Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex-1 min-w-0"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"text-sm font-bold truncate"Tb4b4b4>
Tff7b72{{ Te6edf3suggestionTb4b4b4.Te6edf3name Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3classTff7b72=Ta5d6ff"text-[10px] font-mono opacity-50 truncate hover:text-blue-500 transition-colors cursor-copy"
Tb4b4b4:Te6edf3titleTff7b72=Ta5d6ff"Te6edf3suggestionTb4b4b4.Te6edf3hashTa5d6ff"
Tb4b4b4@Te6edf3mousedownTb4b4b4.Te6edf3stopTff7b72=Ta5d6ff"Te6edf3copyHashTb4b4b4(Te6edf3suggestionTb4b4b4.Te6edf3hashTb4b4b4)Ta5d6ff"
Tb4b4b4>
Tff7b72{{ Te6edf3formatDestinationHashTb4b4b4(Te6edf3suggestionTb4b4b4.Te6edf3hashTb4b4b4) Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3suggestionTb4b4b4.Te6edf3type Tff7b72=== Ta5d6ff'contact'Ta5d6ff"
Te6edf3classTff7b72=Ta5d6ff"text-[10px] uppercase font-bold tracking-widest opacity-30"
Tb4b4b4>
Contact
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72button
Te6edf3typeTff7b72=Ta5d6ff"button"
Te6edf3classTff7b72=Ta5d6ff"bg-blue-600 hover:bg-blue-500 text-white px-6 rounded-2xl font-bold shadow-lg shadow-blue-500/20 transition-all flex items-center gap-2"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3callTb4b4b4(Te6edf3destinationHashTb4b4b4)Ta5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"phone" Te6edf3classTff7b72=Ta5d6ff"size-5" Tb4b4b4/Tb4b4b4>
Call
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>

Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"pt-2 flex items-start justify-between gap-4"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex flex-col gap-2 flex-1"Tb4b4b4>
Tb4b4b4<Tff7b72Toggle
Te6edf3idTff7b72=Ta5d6ff"dnd-toggle"
Tb4b4b4:Te6edf3model-valueTff7b72=Ta5d6ff"Te6edf3configTff7b72?Tb4b4b4.Te6edf3do_not_disturb_enabledTa5d6ff"
Tb4b4b4:Te6edf3labelTff7b72=Ta5d6ff"Te6edf3$tTb4b4b4(Ta5d6ff'call.do_not_disturb'Tb4b4b4)Ta5d6ff"
Tb4b4b4@Te6edf3updateTb4b4b4:Te6edf3model-valueTff7b72=Ta5d6ff"Te6edf3toggleDoNotDisturbTa5d6ff"
Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tff7b72Toggle
Te6edf3idTff7b72=Ta5d6ff"contacts-only-toggle"
Tb4b4b4:Te6edf3model-valueTff7b72=Ta5d6ff"Te6edf3configTff7b72?Tb4b4b4.Te6edf3telephone_allow_calls_from_contacts_onlyTa5d6ff"
Tb4b4b4:Te6edf3labelTff7b72=Ta5d6ff"Te6edf3$tTb4b4b4(Ta5d6ff'call.allow_calls_from_contacts_only'Tb4b4b4)Ta5d6ff"
Tb4b4b4@Te6edf3updateTb4b4b4:Te6edf3model-valueTff7b72=Ta5d6ff"Te6edf3toggleAllowCallsFromContactsOnlyTa5d6ff"
Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex flex-col gap-1"Tb4b4b4>
Tb4b4b4<Tff7b72Toggle
Te6edf3idTff7b72=Ta5d6ff"web-audio-toggle"
Tb4b4b4:Te6edf3model-valueTff7b72=Ta5d6ff"Te6edf3configTff7b72?Tb4b4b4.Te6edf3telephone_web_audio_enabledTa5d6ff"
Te6edf3labelTff7b72=Ta5d6ff"Web Audio Bridge"
Tb4b4b4@Te6edf3updateTb4b4b4:Te6edf3model-valueTff7b72=Ta5d6ff"Te6edf3onToggleWebAudioTa5d6ff"
Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"text-xs text-gray-500 dark:text-zinc-400 px-1"Tb4b4b4>
Web audio bridge allows web/electron to hook into LXST backend for
passing microphone and audio streams to active telephone calls.
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex flex-col gap-2 shrink-0"Tb4b4b4>
T8b949e<!-- <Toggle
id="call-recording-toggle"
:model-value="config?.call_recording_enabled"
:label="$t('call.call_recording')"
@update:model-value="toggleCallRecording"
/> -->
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex flex-col gap-1"Tb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3classTff7b72=Ta5d6ff"text-[10px] font-bold text-gray-500 uppercase tracking-widest px-1"
Tb4b4b4>
Tff7b72{{ Te6edf3$tTb4b4b4(Ta5d6ff"call.default_quality"Tb4b4b4) Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72select
Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3configTa5d6ff"
Te6edf3v-modelTff7b72=Ta5d6ff"Te6edf3configTb4b4b4.Te6edf3telephone_audio_profile_idTa5d6ff"
Te6edf3classTff7b72=Ta5d6ff"input-field !py-1 !px-2 !text-xs !rounded-lg !border-gray-200 dark:!border-zinc-800 min-w-[120px]"
Tb4b4b4@Te6edf3changeTff7b72=Ta5d6ff"
Te6edf3updateConfigTb4b4b4(Tb4b4b4{
Te6edf3telephone_audio_profile_idTff7b72: Te6edf3configTb4b4b4.Te6edf3telephone_audio_profile_idTb4b4b4,
Tb4b4b4}Tb4b4b4)
Ta5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72option
Te6edf3v-forTff7b72=Ta5d6ff"Te6edf3audioProfile Tff7b72in Te6edf3audioProfilesTa5d6ff"
Tb4b4b4:Te6edf3keyTff7b72=Ta5d6ff"Te6edf3audioProfileTb4b4b4.Te6edf3idTa5d6ff"
Tb4b4b4:Te6edf3valueTff7b72=Ta5d6ff"Te6edf3audioProfileTb4b4b4.Te6edf3idTa5d6ff"
Tb4b4b4>
Tff7b72{{ Te6edf3audioProfileTb4b4b4.Te6edf3name Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72optionTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72selectTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>

T8b949e<!-- Web Audio Device Selection -->
Tb4b4b4<Tff7b72div
Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3configTff7b72?Tb4b4b4.Te6edf3telephone_web_audio_enabledTa5d6ff"
Te6edf3classTff7b72=Ta5d6ff"flex flex-col gap-2 mt-2"
Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex flex-col gap-1"Tb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3classTff7b72=Ta5d6ff"text-[10px] font-bold text-gray-500 uppercase tracking-widest px-1"
Tb4b4b4>
Microphone
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72select
Te6edf3v-modelTff7b72=Ta5d6ff"Te6edf3selectedAudioInputIdTa5d6ff"
Te6edf3classTff7b72=Ta5d6ff"input-field !py-1 !px-2 !text-[10px] !rounded-lg !border-gray-200 dark:!border-zinc-800 min-w-[120px]"
Tb4b4b4@Te6edf3changeTff7b72=Ta5d6ff"
Te6edf3stopWebAudioTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3startWebAudioTb4b4b4(Tb4b4b4)Tb4b4b4;
Ta5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72option
Te6edf3v-forTff7b72=Ta5d6ff"Te6edf3d Tff7b72in Te6edf3audioInputDevicesTa5d6ff"
Tb4b4b4:Te6edf3keyTff7b72=Ta5d6ff"Te6edf3dTb4b4b4.Te6edf3deviceIdTa5d6ff"
Tb4b4b4:Te6edf3valueTff7b72=Ta5d6ff"Te6edf3dTb4b4b4.Te6edf3deviceIdTa5d6ff"
Tb4b4b4>
Tff7b72{{ Te6edf3dTb4b4b4.Te6edf3label Tff7b72|| Ta5d6ff"Microphone" Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72optionTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72selectTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex flex-col gap-1"Tb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3classTff7b72=Ta5d6ff"text-[10px] font-bold text-gray-500 uppercase tracking-widest px-1"
Tb4b4b4>
Speaker
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72select
Te6edf3v-modelTff7b72=Ta5d6ff"Te6edf3selectedAudioOutputIdTa5d6ff"
Te6edf3classTff7b72=Ta5d6ff"input-field !py-1 !px-2 !text-[10px] !rounded-lg !border-gray-200 dark:!border-zinc-800 min-w-[120px]"
Tb4b4b4@Te6edf3changeTff7b72=Ta5d6ff"
Te6edf3stopWebAudioTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3startWebAudioTb4b4b4(Tb4b4b4)Tb4b4b4;
Ta5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72option
Te6edf3v-forTff7b72=Ta5d6ff"Te6edf3d Tff7b72in Te6edf3audioOutputDevicesTa5d6ff"
Tb4b4b4:Te6edf3keyTff7b72=Ta5d6ff"Te6edf3dTb4b4b4.Te6edf3deviceIdTa5d6ff"
Tb4b4b4:Te6edf3valueTff7b72=Ta5d6ff"Te6edf3dTb4b4b4.Te6edf3deviceIdTa5d6ff"
Tb4b4b4>
Tff7b72{{ Te6edf3dTb4b4b4.Te6edf3label Tff7b72|| Ta5d6ff"Speaker" Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72optionTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72selectTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72button
Te6edf3classTff7b72=Ta5d6ff"text-[10px] bg-gray-100 text-gray-600 dark:bg-zinc-800 dark:text-zinc-400 py-1 rounded-lg font-bold uppercase tracking-wider hover:bg-gray-200 dark:hover:bg-zinc-700 transition-colors"
Te6edf3typeTff7b72=Ta5d6ff"button"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3requestAudioPermissionTa5d6ff"
Tb4b4b4>
Refresh Devices
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>

T8b949e<!-- Call History -->
Tb4b4b4<Tff7b72div
Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3callHistoryTb4b4b4.Te6edf3length Tff7b72> T79c0ff0 Tff7b72&& Tff7b72!Te6edf3activeCall Tff7b72&& Tff7b72!Te6edf3isCallEndedTa5d6ff"
Te6edf3classTff7b72=Ta5d6ff"space-y-4 max-w-3xl mx-auto w-full"
Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"glass-card !p-0 overflow-hidden"Tb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3classTff7b72=Ta5d6ff"px-5 py-4 border-b border-gray-100 dark:border-zinc-800 flex flex-col gap-4 bg-gray-50/50 dark:bg-zinc-800/20"
Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex justify-between items-center"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex items-center gap-2"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"p-1.5 bg-gray-200/50 dark:bg-zinc-800 rounded-lg"Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon
Te6edf3icon-nameTff7b72=Ta5d6ff"history"
Te6edf3classTff7b72=Ta5d6ff"size-4 text-gray-600 dark:text-zinc-400"
Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72h3
Te6edf3classTff7b72=Ta5d6ff"text-xs font-bold text-gray-500 dark:text-zinc-400 uppercase tracking-widest"
Tb4b4b4>
Call History
Tb4b4b4<Tb4b4b4/Tff7b72h3Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72button
Te6edf3typeTff7b72=Ta5d6ff"button"
Te6edf3classTff7b72=Ta5d6ff"text-[10px] text-gray-400 hover:text-red-500 font-bold uppercase tracking-wider transition-colors bg-white dark:bg-zinc-900 px-2 py-1 rounded-md border border-gray-200 dark:border-zinc-800"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3clearHistoryTa5d6ff"
Tb4b4b4>
Tff7b72{{ Te6edf3$tTb4b4b4(Ta5d6ff"app.clear_history"Tb4b4b4) Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"relative"Tb4b4b4>
Tb4b4b4<Tff7b72input
Te6edf3v-modelTff7b72=Ta5d6ff"Te6edf3callHistorySearchTa5d6ff"
Te6edf3typeTff7b72=Ta5d6ff"text"
Tb4b4b4:Te6edf3placeholderTff7b72=Ta5d6ff"Te6edf3$tTb4b4b4(Ta5d6ff'call.search_history'Tb4b4b4)Ta5d6ff"
Te6edf3classTff7b72=Ta5d6ff"input-field !py-2 !pl-10"
Tb4b4b4@Te6edf3inputTff7b72=Ta5d6ff"Te6edf3onCallHistorySearchInputTa5d6ff"
Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon
Te6edf3icon-nameTff7b72=Ta5d6ff"magnify"
Te6edf3classTff7b72=Ta5d6ff"absolute left-3.5 top-1/2 -translate-y-1/2 size-4 text-gray-400"
Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72ul Te6edf3classTff7b72=Ta5d6ff"divide-y divide-gray-100 dark:divide-zinc-800"Tb4b4b4>
Tb4b4b4<Tff7b72li
Te6edf3v-forTff7b72=Ta5d6ff"Te6edf3entry Tff7b72in Te6edf3callHistoryTa5d6ff"
Tb4b4b4:Te6edf3keyTff7b72=Ta5d6ff"Te6edf3entryTb4b4b4.Te6edf3idTa5d6ff"
Te6edf3classTff7b72=Ta5d6ff"px-5 py-4 hover:bg-blue-50/30 dark:hover:bg-blue-900/10 transition-colors group"
Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex items-center space-x-4"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"relative shrink-0"Tb4b4b4>
Tb4b4b4<Tff7b72LxmfUserIcon
Tb4b4b4:Te6edf3custom-imageTff7b72=Ta5d6ff"
Te6edf3entryTb4b4b4.Te6edf3contact_image Tff7b72||
Te6edf3getContactByHashTb4b4b4(Te6edf3entryTb4b4b4.Te6edf3remote_identity_hashTb4b4b4)Tff7b72?Tb4b4b4.Te6edf3custom_image
Ta5d6ff"
Tb4b4b4:Te6edf3icon-nameTff7b72=Ta5d6ff"Te6edf3entryTb4b4b4.Te6edf3remote_icon Tff7b72? Te6edf3entryTb4b4b4.Te6edf3remote_iconTb4b4b4.Te6edf3icon_name Tff7b72: Ta5d6ff''Ta5d6ff"
Tb4b4b4:Te6edf3icon-foreground-colourTff7b72=Ta5d6ff"
Te6edf3entryTb4b4b4.Te6edf3remote_icon Tff7b72? Te6edf3entryTb4b4b4.Te6edf3remote_iconTb4b4b4.Te6edf3foreground_colour Tff7b72: Ta5d6ff''
Ta5d6ff"
Tb4b4b4:Te6edf3icon-background-colourTff7b72=Ta5d6ff"
Te6edf3entryTb4b4b4.Te6edf3remote_icon Tff7b72? Te6edf3entryTb4b4b4.Te6edf3remote_iconTb4b4b4.Te6edf3background_colour Tff7b72: Ta5d6ff''
Ta5d6ff"
Te6edf3icon-classTff7b72=Ta5d6ff"size-10"
Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3classTff7b72=Ta5d6ff"absolute -bottom-1 -right-1 bg-white dark:bg-zinc-900 rounded-full p-0.5 shadow-sm border border-gray-100 dark:border-zinc-800 shrink-0 flex items-center justify-center size-5"
Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon
Tb4b4b4:Te6edf3icon-nameTff7b72=Ta5d6ff"Te6edf3entryTb4b4b4.Te6edf3is_incoming Tff7b72? Ta5d6ff'phone-incoming' Tff7b72: Ta5d6ff'phone-outgoing'Ta5d6ff"
Tb4b4b4:Te6edf3classTff7b72=Ta5d6ff"Te6edf3entryTb4b4b4.Te6edf3is_incoming Tff7b72? Ta5d6ff'text-blue-500' Tff7b72: Ta5d6ff'text-green-500'Ta5d6ff"
Te6edf3classTff7b72=Ta5d6ff"size-3"
Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>

Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex-1 min-w-0"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex items-center justify-between"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"text-sm font-bold text-gray-900 dark:text-white truncate"Tb4b4b4>
Tff7b72{{ Te6edf3entryTb4b4b4.Te6edf3remote_identity_name Tff7b72|| Te6edf3$tTb4b4b4(Ta5d6ff"call.unknown"Tb4b4b4) Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3classTff7b72=Ta5d6ff"text-[10px] text-gray-500 dark:text-zinc-500 font-mono shrink-0"
Tb4b4b4>
Tff7b72{{ Te6edf3entryTb4b4b4.Te6edf3timestamp Tff7b72? Te6edf3formatDateTimeTb4b4b4(Te6edf3entryTb4b4b4.Te6edf3timestamp Tff7b72* T79c0ff1000Tb4b4b4) Tff7b72: Ta5d6ff"" Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>

Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex items-center justify-between mt-0.5"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"min-w-0"Tb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3classTff7b72=Ta5d6ff"flex items-center gap-2 text-[10px] text-gray-500 dark:text-zinc-400"
Tb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"capitalize"Tb4b4b4>Tff7b72{{ Te6edf3entryTb4b4b4.Te6edf3status Tff7b72}}Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span
Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3entryTb4b4b4.Te6edf3duration_seconds Tff7b72> T79c0ff0Ta5d6ff"
Te6edf3classTff7b72=Ta5d6ff"text-gray-300 dark:text-zinc-700"
Tb4b4b4>•Tb4b4b4<Tb4b4b4/Tff7b72span
Tb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3entryTb4b4b4.Te6edf3duration_seconds Tff7b72> T79c0ff0Ta5d6ff"Tb4b4b4>Tff7b72{{
Te6edf3formatDurationTb4b4b4(Te6edf3entryTb4b4b4.Te6edf3duration_secondsTb4b4b4)
Tff7b72}}Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3classTff7b72=Ta5d6ff"text-[10px] font-mono text-gray-400 dark:text-zinc-600 truncate mt-0.5 cursor-pointer hover:text-blue-500 transition-colors"
Tb4b4b4:Te6edf3titleTff7b72=Ta5d6ff"
Te6edf3entryTb4b4b4.Te6edf3remote_telephony_hash Tff7b72||
Te6edf3entryTb4b4b4.Te6edf3remote_destination_hash Tff7b72||
Te6edf3entryTb4b4b4.Te6edf3remote_identity_hash
Ta5d6ff"
Tb4b4b4@Te6edf3clickTb4b4b4.Te6edf3stopTff7b72=Ta5d6ff"
Te6edf3copyHashTb4b4b4(
Te6edf3entryTb4b4b4.Te6edf3remote_telephony_hash Tff7b72||
Te6edf3entryTb4b4b4.Te6edf3remote_destination_hash Tff7b72||
Te6edf3entryTb4b4b4.Te6edf3remote_identity_hash
Tb4b4b4)
Ta5d6ff"
Tb4b4b4>
Tff7b72{{
Te6edf3formatDestinationHashTb4b4b4(
Te6edf3entryTb4b4b4.Te6edf3remote_telephony_hash Tff7b72||
Te6edf3entryTb4b4b4.Te6edf3remote_destination_hash Tff7b72||
Te6edf3entryTb4b4b4.Te6edf3remote_identity_hash
Tb4b4b4)
Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>

Tb4b4b4<Tff7b72div
Te6edf3classTff7b72=Ta5d6ff"flex items-center gap-1.5 opacity-0 group-hover:opacity-100 transition-opacity shrink-0 ml-4"
Tb4b4b4>
Tb4b4b4<Tff7b72button
Te6edf3v-ifTff7b72=Ta5d6ff"Tff7b72!Te6edf3entryTb4b4b4.Te6edf3is_contactTa5d6ff"
Te6edf3typeTff7b72=Ta5d6ff"button"
Te6edf3classTff7b72=Ta5d6ff"p-1.5 rounded-lg text-gray-400 hover:text-blue-500 hover:bg-blue-50 dark:hover:bg-blue-900/20 transition-all shrink-0"
Te6edf3titleTff7b72=Ta5d6ff"Add to contacts"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3addContactFromHistoryTb4b4b4(Te6edf3entryTb4b4b4)Ta5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"account-plus" Te6edf3classTff7b72=Ta5d6ff"size-4" Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tff7b72button
Te6edf3typeTff7b72=Ta5d6ff"button"
Te6edf3classTff7b72=Ta5d6ff"p-1.5 rounded-lg text-gray-400 hover:text-red-500 hover:bg-red-50 dark:hover:bg-red-900/20 transition-all shrink-0"
Tb4b4b4:Te6edf3titleTff7b72=Ta5d6ff"Te6edf3$tTb4b4b4(Ta5d6ff'common.block'Tb4b4b4)Ta5d6ff"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3blockIdentityTb4b4b4(Te6edf3entryTb4b4b4.Te6edf3remote_identity_hashTb4b4b4)Ta5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"account-remove" Te6edf3classTff7b72=Ta5d6ff"size-4" Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tff7b72button
Te6edf3typeTff7b72=Ta5d6ff"button"
Te6edf3classTff7b72=Ta5d6ff"flex items-center gap-1.5 px-3 py-1 bg-blue-600 text-white rounded-lg text-[10px] font-bold hover:bg-blue-500 transition-all shadow-md shadow-blue-500/10 shrink-0"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"
Te6edf3destinationHash Tff7b72=
Te6edf3entryTb4b4b4.Te6edf3remote_telephony_hash Tff7b72||
Te6edf3entryTb4b4b4.Te6edf3remote_destination_hash Tff7b72||
Te6edf3entryTb4b4b4.Te6edf3remote_identity_hashTb4b4b4;
Te6edf3activeTab Tff7b72= Ta5d6ff'phone'Tb4b4b4;
Te6edf3$nextTickTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Te6edf3callTb4b4b4(Te6edf3destinationHashTb4b4b4)Tb4b4b4)Tb4b4b4;
Ta5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"phone" Te6edf3classTff7b72=Ta5d6ff"size-3" Tb4b4b4/Tb4b4b4>
Tff7b72{{ Te6edf3$tTb4b4b4(Ta5d6ff"call.call_back"Tb4b4b4) Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72ulTb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3hasMoreCallHistoryTa5d6ff"
Te6edf3classTff7b72=Ta5d6ff"p-4 border-t border-gray-100 dark:border-zinc-800 text-center bg-gray-50/30 dark:bg-zinc-800/10"
Tb4b4b4>
Tb4b4b4<Tff7b72button
Te6edf3typeTff7b72=Ta5d6ff"button"
Te6edf3classTff7b72=Ta5d6ff"text-xs font-bold text-blue-600 dark:text-blue-400 hover:underline uppercase tracking-wider"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3loadMoreCallHistoryTa5d6ff"
Tb4b4b4>
Tff7b72{{ Te6edf3$tTb4b4b4(Ta5d6ff"call.load_more"Tb4b4b4) Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>

T8b949e<!-- Phonebook Tab -->
Tb4b4b4<Tff7b72div Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3activeTab Tff7b72=== Ta5d6ff'phonebook'Ta5d6ff" Te6edf3classTff7b72=Ta5d6ff"flex-1 flex flex-col max-w-3xl mx-auto w-full"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"mb-4"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"relative"Tb4b4b4>
Tb4b4b4<Tff7b72input
Te6edf3v-modelTff7b72=Ta5d6ff"Te6edf3discoverySearchTa5d6ff"
Te6edf3typeTff7b72=Ta5d6ff"text"
Tb4b4b4:Te6edf3placeholderTff7b72=Ta5d6ff"Ta5d6ff`Ta5d6ffSearch phonebook (Tffd700${Te6edf3totalDiscoveryCountTffd700}Ta5d6ff)...Ta5d6ff`Ta5d6ff"
Te6edf3classTff7b72=Ta5d6ff"block w-full rounded-lg border-0 py-2 pl-10 text-gray-900 dark:text-white shadow-sm ring-1 ring-inset ring-gray-300 dark:ring-zinc-800 placeholder:text-gray-400 focus:ring-2 focus:ring-inset focus:ring-blue-600 sm:text-sm dark:bg-zinc-900"
Tb4b4b4@Te6edf3inputTff7b72=Ta5d6ff"Te6edf3onDiscoverySearchInputTa5d6ff"
Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"pointer-events-none absolute inset-y-0 left-0 flex items-center pl-3"Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"magnify" Te6edf3classTff7b72=Ta5d6ff"size-5 text-gray-400" Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>

Tb4b4b4<Tff7b72div Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3discoveryAnnouncesTb4b4b4.Te6edf3length Tff7b72=== T79c0ff0Ta5d6ff" Te6edf3classTff7b72=Ta5d6ff"my-auto text-center"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"bg-gray-200 dark:bg-zinc-800 p-6 rounded-full inline-block mb-4"Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"satellite-uplink" Te6edf3classTff7b72=Ta5d6ff"size-12 text-gray-400" Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72h3 Te6edf3classTff7b72=Ta5d6ff"text-lg font-medium text-gray-900 dark:text-white"Tb4b4b4>No Telephony PeersTb4b4b4<Tb4b4b4/Tff7b72h3Tb4b4b4>
Tb4b4b4<Tff7b72p Te6edf3classTff7b72=Ta5d6ff"text-gray-500 dark:text-zinc-400"Tb4b4b4>Waiting for announces on the mesh.Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>

Tb4b4b4<Tff7b72div Te6edf3v-else Te6edf3classTff7b72=Ta5d6ff"space-y-4"Tb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3classTff7b72=Ta5d6ff"bg-white dark:bg-zinc-900 rounded-xl shadow-sm border border-gray-200 dark:border-zinc-800 overflow-hidden"
Tb4b4b4>
Tb4b4b4<Tff7b72ul Te6edf3classTff7b72=Ta5d6ff"divide-y divide-gray-100 dark:divide-zinc-800"Tb4b4b4>
Tb4b4b4<Tff7b72li
Te6edf3v-forTff7b72=Ta5d6ff"Te6edf3announce Tff7b72in Te6edf3discoveryAnnouncesTa5d6ff"
Tb4b4b4:Te6edf3keyTff7b72=Ta5d6ff"Te6edf3announceTb4b4b4.Te6edf3destination_hashTa5d6ff"
Te6edf3classTff7b72=Ta5d6ff"px-4 py-4 hover:bg-gray-50 dark:hover:bg-zinc-800/50 transition-colors"
Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex items-center space-x-4"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"shrink-0"Tb4b4b4>
Tb4b4b4<Tff7b72LxmfUserIcon
Tb4b4b4:Te6edf3custom-imageTff7b72=Ta5d6ff"Te6edf3announceTb4b4b4.Te6edf3contact_imageTa5d6ff"
Tb4b4b4:Te6edf3icon-nameTff7b72=Ta5d6ff"Te6edf3announceTb4b4b4.Te6edf3lxmf_user_iconTff7b72?Tb4b4b4.Te6edf3icon_nameTa5d6ff"
Tb4b4b4:Te6edf3icon-foreground-colourTff7b72=Ta5d6ff"Te6edf3announceTb4b4b4.Te6edf3lxmf_user_iconTff7b72?Tb4b4b4.Te6edf3foreground_colourTa5d6ff"
Tb4b4b4:Te6edf3icon-background-colourTff7b72=Ta5d6ff"Te6edf3announceTb4b4b4.Te6edf3lxmf_user_iconTff7b72?Tb4b4b4.Te6edf3background_colourTa5d6ff"
Te6edf3classTff7b72=Ta5d6ff"size-10"
Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex-1 min-w-0"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex items-center justify-between"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex items-center min-w-0"Tb4b4b4>
Tb4b4b4<Tff7b72p Te6edf3classTff7b72=Ta5d6ff"text-sm font-bold text-gray-900 dark:text-white truncate"Tb4b4b4>
Tff7b72{{ Te6edf3announceTb4b4b4.Te6edf3display_name Tff7b72|| Ta5d6ff"Anonymous Peer" Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72a
Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3announceTb4b4b4.Te6edf3lxmf_destination_hashTa5d6ff"
Tb4b4b4:Te6edf3hrefTff7b72=Ta5d6ff"Ta5d6ff`Ta5d6ff/#/messages/Tffd700${Te6edf3announceTb4b4b4.Te6edf3lxmf_destination_hashTffd700}Ta5d6ff`Ta5d6ff"
Te6edf3classTff7b72=Ta5d6ff"ml-2 p-1 text-gray-400 hover:text-blue-500 transition-colors"
Te6edf3titleTff7b72=Ta5d6ff"Message via LXMF"
@Te6edf3click.Te6edf3stop
Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon
Te6edf3icon-nameTff7b72=Ta5d6ff"message-text-outline"
Te6edf3classTff7b72=Ta5d6ff"size-4"
Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72span
Te6edf3classTff7b72=Ta5d6ff"text-[10px] text-gray-500 dark:text-zinc-500 font-mono ml-2 shrink-0"
Tb4b4b4>
Tff7b72{{ Te6edf3formatTimeAgoTb4b4b4(Te6edf3announceTb4b4b4.Te6edf3updated_atTb4b4b4) Tff7b72}} ago
Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex items-center justify-between mt-1"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex items-center space-x-2 min-w-0"Tb4b4b4>
Tb4b4b4<Tff7b72span
Te6edf3classTff7b72=Ta5d6ff"text-[10px] text-gray-500 dark:text-zinc-500 font-mono truncate cursor-pointer hover:text-blue-500 transition-colors"
Tb4b4b4:Te6edf3titleTff7b72=Ta5d6ff"Te6edf3announceTb4b4b4.Te6edf3destination_hashTa5d6ff"
Tb4b4b4@Te6edf3clickTb4b4b4.Te6edf3stopTff7b72=Ta5d6ff"Te6edf3copyHashTb4b4b4(Te6edf3announceTb4b4b4.Te6edf3destination_hashTb4b4b4)Ta5d6ff"
Tb4b4b4>
Tff7b72{{ Te6edf3formatDestinationHashTb4b4b4(Te6edf3announceTb4b4b4.Te6edf3destination_hashTb4b4b4) Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span
Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3announceTb4b4b4.Te6edf3hops Tff7b72!= Tff7b72nullTa5d6ff"
Te6edf3classTff7b72=Ta5d6ff"text-[10px] text-gray-400 dark:text-zinc-600"
Tb4b4b4>
• Tff7b72{{ Te6edf3announceTb4b4b4.Te6edf3hops Tff7b72}} hops
Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72button
Te6edf3typeTff7b72=Ta5d6ff"button"
Te6edf3classTff7b72=Ta5d6ff"text-[10px] bg-blue-100 text-blue-600 dark:bg-blue-900/30 dark:text-blue-400 px-3 py-1 rounded-full font-bold uppercase tracking-wider hover:bg-blue-200 dark:hover:bg-blue-900/50 transition-colors shrink-0"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"
Te6edf3destinationHash Tff7b72= Te6edf3announceTb4b4b4.Te6edf3destination_hashTb4b4b4;
Te6edf3activeTab Tff7b72= Ta5d6ff'phone'Tb4b4b4;
Te6edf3$nextTickTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Te6edf3callTb4b4b4(Te6edf3destinationHashTb4b4b4)Tb4b4b4)Tb4b4b4;
Ta5d6ff"
Tb4b4b4>
Call
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72ulTb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3hasMoreDiscoveryTa5d6ff"
Te6edf3classTff7b72=Ta5d6ff"p-3 border-t border-gray-100 dark:border-zinc-800 text-center"
Tb4b4b4>
Tb4b4b4<Tff7b72button
Te6edf3typeTff7b72=Ta5d6ff"button"
Te6edf3classTff7b72=Ta5d6ff"text-xs text-blue-500 hover:text-blue-600 font-bold uppercase tracking-widest"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3loadMoreDiscoveryTa5d6ff"
Tb4b4b4>
Tff7b72{{ Te6edf3$tTb4b4b4(Ta5d6ff"call.load_more"Tb4b4b4) Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>

T8b949e<!-- Voicemail Tab -->
Tb4b4b4<Tff7b72div Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3activeTab Tff7b72=== Ta5d6ff'voicemail'Ta5d6ff" Te6edf3classTff7b72=Ta5d6ff"flex-1 flex flex-col max-w-3xl mx-auto w-full"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"mb-4"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"relative"Tb4b4b4>
Tb4b4b4<Tff7b72input
Te6edf3v-modelTff7b72=Ta5d6ff"Te6edf3voicemailSearchTa5d6ff"
Te6edf3typeTff7b72=Ta5d6ff"text"
Te6edf3placeholderTff7b72=Ta5d6ff"Search voicemails..."
Te6edf3classTff7b72=Ta5d6ff"block w-full rounded-lg border-0 py-2 pl-10 text-gray-900 dark:text-white shadow-sm ring-1 ring-inset ring-gray-300 dark:ring-zinc-800 placeholder:text-gray-400 focus:ring-2 focus:ring-inset focus:ring-blue-600 sm:text-sm dark:bg-zinc-900"
Tb4b4b4@Te6edf3inputTff7b72=Ta5d6ff"Te6edf3onVoicemailSearchInputTa5d6ff"
Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"pointer-events-none absolute inset-y-0 left-0 flex items-center pl-3"Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"magnify" Te6edf3classTff7b72=Ta5d6ff"size-5 text-gray-400" Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>

T8b949e<!-- Voicemail Settings Card -->
Tb4b4b4<Tff7b72div
Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3configTa5d6ff"
Te6edf3classTff7b72=Ta5d6ff"mb-4 bg-white dark:bg-zinc-900 rounded-xl shadow-sm border border-gray-200 dark:border-zinc-800 overflow-hidden"
Tb4b4b4>
Tb4b4b4<Tff7b72button
Te6edf3typeTff7b72=Ta5d6ff"button"
Te6edf3classTff7b72=Ta5d6ff"w-full px-4 py-3 flex items-center justify-between hover:bg-gray-50 dark:hover:bg-zinc-800/50 transition-colors"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3isVoicemailSettingsExpanded Tff7b72= Tff7b72!Te6edf3isVoicemailSettingsExpandedTa5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex items-center gap-2"Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"cog" Te6edf3classTff7b72=Ta5d6ff"size-5 text-blue-500" Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tff7b72h3 Te6edf3classTff7b72=Ta5d6ff"text-sm font-bold text-gray-900 dark:text-white uppercase tracking-wider"Tb4b4b4>
Voicemail Settings
Tb4b4b4<Tb4b4b4/Tff7b72h3Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon
Tb4b4b4:Te6edf3icon-nameTff7b72=Ta5d6ff"Te6edf3isVoicemailSettingsExpanded Tff7b72? Ta5d6ff'chevron-up' Tff7b72: Ta5d6ff'chevron-down'Ta5d6ff"
Te6edf3classTff7b72=Ta5d6ff"size-5 text-gray-400"
Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>

Tb4b4b4<Tff7b72div Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3isVoicemailSettingsExpandedTa5d6ff" Te6edf3classTff7b72=Ta5d6ff"px-4 pb-6 space-y-6"Tb4b4b4>
T8b949e<!-- Status Banner -->
Tb4b4b4<Tff7b72div
Te6edf3v-ifTff7b72=Ta5d6ff"Tff7b72!Te6edf3voicemailStatusTb4b4b4.Te6edf3has_espeak Tff7b72|| Tff7b72!Te6edf3voicemailStatusTb4b4b4.Te6edf3has_ffmpegTa5d6ff"
Te6edf3classTff7b72=Ta5d6ff"p-4 bg-amber-50 dark:bg-amber-900/20 border border-amber-200 dark:border-amber-800 rounded-lg flex gap-3 items-start"
Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon
Te6edf3icon-nameTff7b72=Ta5d6ff"alert"
Te6edf3classTff7b72=Ta5d6ff"size-5 text-amber-600 dark:text-amber-400 shrink-0"
Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"text-xs text-amber-800 dark:text-amber-200"Tb4b4b4>
Tb4b4b4<Tff7b72p Te6edf3classTff7b72=Ta5d6ff"font-bold mb-1"Tb4b4b4>Dependencies MissingTb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72p Te6edf3v-ifTff7b72=Ta5d6ff"Tff7b72!Te6edf3voicemailStatusTb4b4b4.Te6edf3has_espeakTa5d6ff"Tb4b4b4>
Voicemail requires `espeak-ng` to generate greetings. Please install it on your
system.
Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72p
Te6edf3v-ifTff7b72=Ta5d6ff"Tff7b72!Te6edf3voicemailStatusTb4b4b4.Te6edf3has_ffmpegTa5d6ff"
Tb4b4b4:Te6edf3classTff7b72=Ta5d6ff"Tb4b4b4{ Ta5d6ff'mt-1'Tff7b72: Tff7b72!Te6edf3voicemailStatusTb4b4b4.Te6edf3has_espeak Tb4b4b4}Ta5d6ff"
Tb4b4b4>
Voicemail requires `ffmpeg` to process audio files. Please install it on your
system.
Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>

T8b949e<!-- Enabled Toggle -->
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex items-center justify-between"Tb4b4b4>
Tb4b4b4<Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"text-sm font-semibold text-gray-900 dark:text-white"Tb4b4b4>
Enable Voicemail
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"text-xs text-gray-500 dark:text-zinc-400"Tb4b4b4>
Accept calls automatically and record messages
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72button
Tb4b4b4:Te6edf3disabledTff7b72=Ta5d6ff"Tff7b72!Te6edf3voicemailStatusTb4b4b4.Te6edf3has_espeak Tff7b72|| Tff7b72!Te6edf3voicemailStatusTb4b4b4.Te6edf3has_ffmpegTa5d6ff"
Te6edf3classTff7b72=Ta5d6ff"relative inline-flex h-6 w-11 shrink-0 cursor-pointer rounded-full border-2 border-transparent transition-colors duration-200 ease-in-out focus:outline-none disabled:opacity-50 disabled:cursor-not-allowed"
Tb4b4b4:Te6edf3classTff7b72=Ta5d6ff"Te6edf3configTb4b4b4.Te6edf3voicemail_enabled Tff7b72? Ta5d6ff'bg-blue-600' Tff7b72: Ta5d6ff'bg-gray-200 dark:bg-zinc-700'Ta5d6ff"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"
Te6edf3configTb4b4b4.Te6edf3voicemail_enabled Tff7b72= Tff7b72!Te6edf3configTb4b4b4.Te6edf3voicemail_enabledTb4b4b4;
Te6edf3updateConfigTb4b4b4(Tb4b4b4{ Te6edf3voicemail_enabledTff7b72: Te6edf3configTb4b4b4.Te6edf3voicemail_enabled Tb4b4b4}Tb4b4b4)Tb4b4b4;
Ta5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72span
Te6edf3classTff7b72=Ta5d6ff"pointer-events-none inline-block h-5 w-5 transform rounded-full bg-white shadow ring-0 transition duration-200 ease-in-out"
Tb4b4b4:Te6edf3classTff7b72=Ta5d6ff"Te6edf3configTb4b4b4.Te6edf3voicemail_enabled Tff7b72? Ta5d6ff'translate-x-5' Tff7b72: Ta5d6ff'translate-x-0'Ta5d6ff"
Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>

T8b949e<!-- Greeting Text -->
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"space-y-2"Tb4b4b4>
Tb4b4b4<Tff7b72label
Te6edf3classTff7b72=Ta5d6ff"text-xs font-bold text-gray-500 dark:text-zinc-400 uppercase tracking-tighter"
Tb4b4b4>Greeting MessageTb4b4b4<Tb4b4b4/Tff7b72label
Tb4b4b4>
Tb4b4b4<Tff7b72textarea
Te6edf3v-modelTff7b72=Ta5d6ff"Te6edf3configTb4b4b4.Te6edf3voicemail_greetingTa5d6ff"
Te6edf3rowsTff7b72=Ta5d6ff"3"
Te6edf3classTff7b72=Ta5d6ff"block w-full rounded-lg border-0 py-2 text-gray-900 dark:text-white shadow-sm ring-1 ring-inset ring-gray-300 dark:ring-zinc-800 placeholder:text-gray-400 focus:ring-2 focus:ring-inset focus:ring-blue-600 sm:text-sm sm:leading-6 dark:bg-zinc-900"
Te6edf3placeholderTff7b72=Ta5d6ff"Enter greeting text..."
Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72textareaTb4b4b4>

T8b949e<!-- TTS Settings -->
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"grid grid-cols-2 gap-3 mt-2"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"space-y-1"Tb4b4b4>
Tb4b4b4<Tff7b72label
Te6edf3classTff7b72=Ta5d6ff"text-[10px] font-bold text-gray-500 dark:text-zinc-500 uppercase tracking-tighter"
Tb4b4b4>Tff7b72{{ Te6edf3$tTb4b4b4(Ta5d6ff"call.tts_speed"Tb4b4b4) Tff7b72}}Tb4b4b4<Tb4b4b4/Tff7b72label
Tb4b4b4>
Tb4b4b4<Tff7b72input
Te6edf3v-modelTb4b4b4.Te6edf3numberTff7b72=Ta5d6ff"Te6edf3configTb4b4b4.Te6edf3voicemail_tts_speedTa5d6ff"
Te6edf3typeTff7b72=Ta5d6ff"number"
Te6edf3minTff7b72=Ta5d6ff"80"
Te6edf3maxTff7b72=Ta5d6ff"450"
Te6edf3classTff7b72=Ta5d6ff"block w-full rounded-lg border-0 py-1 text-gray-900 dark:text-white shadow-sm ring-1 ring-inset ring-gray-300 dark:ring-zinc-800 focus:ring-2 focus:ring-inset focus:ring-blue-600 text-xs dark:bg-zinc-900"
Tb4b4b4@Te6edf3changeTff7b72=Ta5d6ff"Te6edf3updateConfigTb4b4b4(Tb4b4b4{ Te6edf3voicemail_tts_speedTff7b72: Te6edf3configTb4b4b4.Te6edf3voicemail_tts_speed Tb4b4b4}Tb4b4b4)Ta5d6ff"
Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"space-y-1"Tb4b4b4>
Tb4b4b4<Tff7b72label
Te6edf3classTff7b72=Ta5d6ff"text-[10px] font-bold text-gray-500 dark:text-zinc-500 uppercase tracking-tighter"
Tb4b4b4>Tff7b72{{ Te6edf3$tTb4b4b4(Ta5d6ff"call.tts_pitch"Tb4b4b4) Tff7b72}}Tb4b4b4<Tb4b4b4/Tff7b72label
Tb4b4b4>
Tb4b4b4<Tff7b72input
Te6edf3v-modelTb4b4b4.Te6edf3numberTff7b72=Ta5d6ff"Te6edf3configTb4b4b4.Te6edf3voicemail_tts_pitchTa5d6ff"
Te6edf3typeTff7b72=Ta5d6ff"number"
Te6edf3minTff7b72=Ta5d6ff"0"
Te6edf3maxTff7b72=Ta5d6ff"99"
Te6edf3classTff7b72=Ta5d6ff"block w-full rounded-lg border-0 py-1 text-gray-900 dark:text-white shadow-sm ring-1 ring-inset ring-gray-300 dark:ring-zinc-800 focus:ring-2 focus:ring-inset focus:ring-blue-600 text-xs dark:bg-zinc-900"
Tb4b4b4@Te6edf3changeTff7b72=Ta5d6ff"Te6edf3updateConfigTb4b4b4(Tb4b4b4{ Te6edf3voicemail_tts_pitchTff7b72: Te6edf3configTb4b4b4.Te6edf3voicemail_tts_pitch Tb4b4b4}Tb4b4b4)Ta5d6ff"
Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"space-y-1"Tb4b4b4>
Tb4b4b4<Tff7b72label
Te6edf3classTff7b72=Ta5d6ff"text-[10px] font-bold text-gray-500 dark:text-zinc-500 uppercase tracking-tighter"
Tb4b4b4>Tff7b72{{ Te6edf3$tTb4b4b4(Ta5d6ff"call.tts_word_gap"Tb4b4b4) Tff7b72}}Tb4b4b4<Tb4b4b4/Tff7b72label
Tb4b4b4>
Tb4b4b4<Tff7b72input
Te6edf3v-modelTb4b4b4.Te6edf3numberTff7b72=Ta5d6ff"Te6edf3configTb4b4b4.Te6edf3voicemail_tts_word_gapTa5d6ff"
Te6edf3typeTff7b72=Ta5d6ff"number"
Te6edf3minTff7b72=Ta5d6ff"0"
Te6edf3maxTff7b72=Ta5d6ff"100"
Te6edf3classTff7b72=Ta5d6ff"block w-full rounded-lg border-0 py-1 text-gray-900 dark:text-white shadow-sm ring-1 ring-inset ring-gray-300 dark:ring-zinc-800 focus:ring-2 focus:ring-inset focus:ring-blue-600 text-xs dark:bg-zinc-900"
Tb4b4b4@Te6edf3changeTff7b72=Ta5d6ff"
Te6edf3updateConfigTb4b4b4(Tb4b4b4{ Te6edf3voicemail_tts_word_gapTff7b72: Te6edf3configTb4b4b4.Te6edf3voicemail_tts_word_gap Tb4b4b4}Tb4b4b4)
Ta5d6ff"
Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"space-y-1"Tb4b4b4>
Tb4b4b4<Tff7b72label
Te6edf3classTff7b72=Ta5d6ff"text-[10px] font-bold text-gray-500 dark:text-zinc-500 uppercase tracking-tighter"
Tb4b4b4>Tff7b72{{ Te6edf3$tTb4b4b4(Ta5d6ff"call.tts_voice"Tb4b4b4) Tff7b72}}Tb4b4b4<Tb4b4b4/Tff7b72label
Tb4b4b4>
Tb4b4b4<Tff7b72input
Te6edf3v-modelTff7b72=Ta5d6ff"Te6edf3configTb4b4b4.Te6edf3voicemail_tts_voiceTa5d6ff"
Te6edf3typeTff7b72=Ta5d6ff"text"
Te6edf3classTff7b72=Ta5d6ff"block w-full rounded-lg border-0 py-1 text-gray-900 dark:text-white shadow-sm ring-1 ring-inset ring-gray-300 dark:ring-zinc-800 focus:ring-2 focus:ring-inset focus:ring-blue-600 text-xs dark:bg-zinc-900"
Tb4b4b4@Te6edf3changeTff7b72=Ta5d6ff"Te6edf3updateConfigTb4b4b4(Tb4b4b4{ Te6edf3voicemail_tts_voiceTff7b72: Te6edf3configTb4b4b4.Te6edf3voicemail_tts_voice Tb4b4b4}Tb4b4b4)Ta5d6ff"
Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>

Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex justify-between items-center"Tb4b4b4>
Tb4b4b4<Tff7b72p Te6edf3classTff7b72=Ta5d6ff"text-[10px] text-gray-500 dark:text-zinc-500"Tb4b4b4>
This text will be converted to speech using eSpeak NG.
Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex gap-2"Tb4b4b4>
Tb4b4b4<Tff7b72button
Tb4b4b4:Te6edf3disabledTff7b72=Ta5d6ff"
Tff7b72!Te6edf3voicemailStatusTb4b4b4.Te6edf3has_espeak Tff7b72||
Tff7b72!Te6edf3voicemailStatusTb4b4b4.Te6edf3has_ffmpeg Tff7b72||
Te6edf3isGeneratingGreeting
Ta5d6ff"
Te6edf3classTff7b72=Ta5d6ff"text-[10px] bg-gray-100 dark:bg-zinc-800 text-gray-700 dark:text-zinc-300 px-3 py-1 rounded-full font-bold hover:bg-gray-200 dark:hover:bg-zinc-700 transition-colors disabled:opacity-50"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"
Te6edf3updateConfigTb4b4b4(Tb4b4b4{ Te6edf3voicemail_greetingTff7b72: Te6edf3configTb4b4b4.Te6edf3voicemail_greeting Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3generateGreetingTb4b4b4(Tb4b4b4)Tb4b4b4;
Ta5d6ff"
Tb4b4b4>
Tff7b72{{ Te6edf3isGeneratingGreeting Tff7b72? Ta5d6ff"Generating..." Tff7b72: Ta5d6ff"Save & Generate" Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>

T8b949e<!-- Custom Greeting Upload -->
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"space-y-2"Tb4b4b4>
Tb4b4b4<Tff7b72label
Te6edf3classTff7b72=Ta5d6ff"text-xs font-bold text-gray-500 dark:text-zinc-400 uppercase tracking-tighter"
Tb4b4b4>Custom Audio GreetingTb4b4b4<Tb4b4b4/Tff7b72label
Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex items-center gap-3 flex-wrap"Tb4b4b4>
Tb4b4b4<Tff7b72input
Te6edf3refTff7b72=Ta5d6ff"greetingUpload"
Te6edf3typeTff7b72=Ta5d6ff"file"
Te6edf3acceptTff7b72=Ta5d6ff"audio/*"
Te6edf3classTff7b72=Ta5d6ff"hidden"
Tb4b4b4@Te6edf3changeTff7b72=Ta5d6ff"Te6edf3uploadGreetingTa5d6ff"
Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tff7b72button
Tb4b4b4:Te6edf3disabledTff7b72=Ta5d6ff"
Tff7b72!Te6edf3voicemailStatusTb4b4b4.Te6edf3has_ffmpeg Tff7b72||
Te6edf3isUploadingGreeting Tff7b72||
Te6edf3voicemailStatusTb4b4b4.Te6edf3is_greeting_recording
Ta5d6ff"
Te6edf3classTff7b72=Ta5d6ff"text-xs bg-gray-100 dark:bg-zinc-800 text-gray-700 dark:text-zinc-300 px-4 py-2 rounded-lg font-bold hover:bg-gray-200 dark:hover:bg-zinc-700 transition-colors disabled:opacity-50 flex items-center gap-2"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3$refsTb4b4b4.Te6edf3greetingUploadTb4b4b4.Te6edf3clickTb4b4b4(Tb4b4b4)Ta5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"upload" Te6edf3classTff7b72=Ta5d6ff"size-4" Tb4b4b4/Tb4b4b4>
Tff7b72{{ Te6edf3isUploadingGreeting Tff7b72? Ta5d6ff"Uploading..." Tff7b72: Ta5d6ff"Upload Audio File" Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tff7b72button
Te6edf3classTff7b72=Ta5d6ff"text-xs px-4 py-2 rounded-lg font-bold transition-colors flex items-center gap-2"
Tb4b4b4:Te6edf3classTff7b72=Ta5d6ff"
Te6edf3voicemailStatusTb4b4b4.Te6edf3is_greeting_recording
Tff7b72? Ta5d6ff'bg-red-500 text-white animate-pulse'
Tff7b72: Ta5d6ff'bg-gray-100 dark:bg-zinc-800 text-gray-700 dark:text-zinc-300 hover:bg-gray-200 dark:hover:bg-zinc-700'
Ta5d6ff"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"
Te6edf3voicemailStatusTb4b4b4.Te6edf3is_greeting_recording
Tff7b72? Te6edf3stopRecordingGreetingMicTb4b4b4(Tb4b4b4)
Tff7b72: Te6edf3startRecordingGreetingMicTb4b4b4(Tb4b4b4)
Ta5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon
Tb4b4b4:Te6edf3icon-nameTff7b72=Ta5d6ff"Te6edf3voicemailStatusTb4b4b4.Te6edf3is_greeting_recording Tff7b72? Ta5d6ff'stop' Tff7b72: Ta5d6ff'microphone'Ta5d6ff"
Te6edf3classTff7b72=Ta5d6ff"size-4"
Tb4b4b4/Tb4b4b4>
Tff7b72{{
Te6edf3voicemailStatusTb4b4b4.Te6edf3is_greeting_recording Tff7b72? Ta5d6ff"Stop Recording" Tff7b72: Ta5d6ff"Record from Mic"
Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>

Tb4b4b4<Tff7b72div Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3voicemailStatusTb4b4b4.Te6edf3has_greetingTa5d6ff" Te6edf3classTff7b72=Ta5d6ff"flex items-center gap-2"Tb4b4b4>
Tb4b4b4<Tff7b72button
Te6edf3classTff7b72=Ta5d6ff"text-xs bg-red-100 dark:bg-red-900/30 text-red-600 dark:text-red-400 px-4 py-2 rounded-lg font-bold hover:bg-red-200 dark:hover:bg-red-900/50 transition-colors flex items-center gap-2"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3deleteGreetingTa5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"delete" Te6edf3classTff7b72=Ta5d6ff"size-4" Tb4b4b4/Tb4b4b4>
Remove Greeting
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tff7b72button
Te6edf3classTff7b72=Ta5d6ff"text-xs bg-blue-100 dark:bg-blue-900/30 text-blue-600 dark:text-blue-400 px-4 py-2 rounded-lg font-bold hover:bg-blue-200 dark:hover:bg-blue-900/50 transition-colors flex items-center gap-2"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3playGreetingTa5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon
Tb4b4b4:Te6edf3icon-nameTff7b72=Ta5d6ff"Te6edf3isPlayingGreeting Tff7b72? Ta5d6ff'stop' Tff7b72: Ta5d6ff'play'Ta5d6ff"
Te6edf3classTff7b72=Ta5d6ff"size-4"
Tb4b4b4/Tb4b4b4>
Tff7b72{{ Te6edf3isPlayingGreeting Tff7b72? Ta5d6ff"Stop Preview" Tff7b72: Ta5d6ff"Preview" Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3v-else Te6edf3classTff7b72=Ta5d6ff"text-[10px] text-gray-500 dark:text-zinc-500 italic"Tb4b4b4>
No custom greeting uploaded (default text will be used)
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72p Te6edf3classTff7b72=Ta5d6ff"text-[10px] text-gray-500 dark:text-zinc-500"Tb4b4b4>
Supports MP3, OGG, WAV, M4A, FLAC. Will be converted to Opus.
Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>

T8b949e<!-- Delays -->
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"grid grid-cols-2 gap-4"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"space-y-2"Tb4b4b4>
Tb4b4b4<Tff7b72label
Te6edf3classTff7b72=Ta5d6ff"text-xs font-bold text-gray-500 dark:text-zinc-400 uppercase tracking-tighter"
Tb4b4b4>Answer Delay (s)Tb4b4b4<Tb4b4b4/Tff7b72label
Tb4b4b4>
Tb4b4b4<Tff7b72input
Te6edf3v-modelTb4b4b4.Te6edf3numberTff7b72=Ta5d6ff"Te6edf3configTb4b4b4.Te6edf3voicemail_auto_answer_delay_secondsTa5d6ff"
Te6edf3typeTff7b72=Ta5d6ff"number"
Te6edf3minTff7b72=Ta5d6ff"1"
Te6edf3maxTff7b72=Ta5d6ff"120"
Te6edf3classTff7b72=Ta5d6ff"block w-full rounded-lg border-0 py-1.5 text-gray-900 dark:text-white shadow-sm ring-1 ring-inset ring-gray-300 dark:ring-zinc-800 focus:ring-2 focus:ring-inset focus:ring-blue-600 sm:text-sm dark:bg-zinc-900"
Tb4b4b4@Te6edf3changeTff7b72=Ta5d6ff"
Te6edf3updateConfigTb4b4b4(Tb4b4b4{
Te6edf3voicemail_auto_answer_delay_secondsTff7b72:
Te6edf3configTb4b4b4.Te6edf3voicemail_auto_answer_delay_secondsTb4b4b4,
Tb4b4b4}Tb4b4b4)
Ta5d6ff"
Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"space-y-2"Tb4b4b4>
Tb4b4b4<Tff7b72label
Te6edf3classTff7b72=Ta5d6ff"text-xs font-bold text-gray-500 dark:text-zinc-400 uppercase tracking-tighter"
Tb4b4b4>Max Recording (s)Tb4b4b4<Tb4b4b4/Tff7b72label
Tb4b4b4>
Tb4b4b4<Tff7b72input
Te6edf3v-modelTb4b4b4.Te6edf3numberTff7b72=Ta5d6ff"Te6edf3configTb4b4b4.Te6edf3voicemail_max_recording_secondsTa5d6ff"
Te6edf3typeTff7b72=Ta5d6ff"number"
Te6edf3minTff7b72=Ta5d6ff"5"
Te6edf3maxTff7b72=Ta5d6ff"600"
Te6edf3classTff7b72=Ta5d6ff"block w-full rounded-lg border-0 py-1.5 text-gray-900 dark:text-white shadow-sm ring-1 ring-inset ring-gray-300 dark:ring-zinc-800 focus:ring-2 focus:ring-inset focus:ring-blue-600 sm:text-sm dark:bg-zinc-900"
Tb4b4b4@Te6edf3changeTff7b72=Ta5d6ff"
Te6edf3updateConfigTb4b4b4(Tb4b4b4{
Te6edf3voicemail_max_recording_secondsTff7b72: Te6edf3configTb4b4b4.Te6edf3voicemail_max_recording_secondsTb4b4b4,
Tb4b4b4}Tb4b4b4)
Ta5d6ff"
Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>

Tb4b4b4<Tff7b72div Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3voicemailsTb4b4b4.Te6edf3length Tff7b72=== T79c0ff0Ta5d6ff" Te6edf3classTff7b72=Ta5d6ff"my-auto text-center"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"bg-gray-200 dark:bg-zinc-800 p-6 rounded-full inline-block mb-4"Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"voicemail" Te6edf3classTff7b72=Ta5d6ff"size-12 text-gray-400" Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72h3 Te6edf3classTff7b72=Ta5d6ff"text-lg font-medium text-gray-900 dark:text-white"Tb4b4b4>No VoicemailsTb4b4b4<Tb4b4b4/Tff7b72h3Tb4b4b4>
Tb4b4b4<Tff7b72p Te6edf3classTff7b72=Ta5d6ff"text-gray-500 dark:text-zinc-400"Tb4b4b4>
When people leave you messages, they'll show up here.
Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>

Tb4b4b4<Tff7b72div Te6edf3v-else Te6edf3classTff7b72=Ta5d6ff"space-y-4"Tb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3classTff7b72=Ta5d6ff"bg-white dark:bg-zinc-900 rounded-xl shadow-sm border border-gray-200 dark:border-zinc-800 overflow-hidden"
Tb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3classTff7b72=Ta5d6ff"px-4 py-3 border-b border-gray-200 dark:border-zinc-800 flex justify-between items-center"
Tb4b4b4>
Tb4b4b4<Tff7b72h3 Te6edf3classTff7b72=Ta5d6ff"text-sm font-bold text-gray-900 dark:text-white uppercase tracking-wider"Tb4b4b4>
Voicemail Inbox
Tb4b4b4<Tb4b4b4/Tff7b72h3Tb4b4b4>
Tb4b4b4<Tff7b72span
Te6edf3classTff7b72=Ta5d6ff"text-[10px] bg-blue-100 text-blue-600 dark:bg-blue-900/30 dark:text-blue-400 px-2 py-0.5 rounded-full font-bold uppercase"
Tb4b4b4>
Tff7b72{{ Te6edf3voicemailsTb4b4b4.Te6edf3length Tff7b72}} Messages
Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72ul Te6edf3classTff7b72=Ta5d6ff"divide-y divide-gray-100 dark:divide-zinc-800"Tb4b4b4>
Tb4b4b4<Tff7b72li
Te6edf3v-forTff7b72=Ta5d6ff"Te6edf3voicemail Tff7b72in Te6edf3voicemailsTa5d6ff"
Tb4b4b4:Te6edf3keyTff7b72=Ta5d6ff"Te6edf3voicemailTb4b4b4.Te6edf3idTa5d6ff"
Te6edf3classTff7b72=Ta5d6ff"px-4 py-4 hover:bg-gray-50 dark:hover:bg-zinc-800/50 transition-colors"
Tb4b4b4:Te6edf3classTff7b72=Ta5d6ff"Tb4b4b4{ Ta5d6ff'bg-blue-50/50 dark:bg-blue-900/10'Tff7b72: Tff7b72!Te6edf3voicemailTb4b4b4.Te6edf3is_read Tb4b4b4}Ta5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex items-start space-x-4"Tb4b4b4>
T8b949e<!-- Icon / Play/Pause Button -->
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"relative shrink-0"Tb4b4b4>
Tb4b4b4<Tff7b72LxmfUserIcon
Tb4b4b4:Te6edf3custom-imageTff7b72=Ta5d6ff"
Te6edf3getContactByHashTb4b4b4(Te6edf3voicemailTb4b4b4.Te6edf3remote_identity_hashTb4b4b4)Tff7b72?Tb4b4b4.Te6edf3custom_image
Ta5d6ff"
Tb4b4b4:Te6edf3icon-nameTff7b72=Ta5d6ff"
Te6edf3voicemailTb4b4b4.Te6edf3remote_icon Tff7b72? Te6edf3voicemailTb4b4b4.Te6edf3remote_iconTb4b4b4.Te6edf3icon_name Tff7b72: Ta5d6ff''
Ta5d6ff"
Tb4b4b4:Te6edf3icon-foreground-colourTff7b72=Ta5d6ff"
Te6edf3voicemailTb4b4b4.Te6edf3remote_icon Tff7b72? Te6edf3voicemailTb4b4b4.Te6edf3remote_iconTb4b4b4.Te6edf3foreground_colour Tff7b72: Ta5d6ff''
Ta5d6ff"
Tb4b4b4:Te6edf3icon-background-colourTff7b72=Ta5d6ff"
Te6edf3voicemailTb4b4b4.Te6edf3remote_icon Tff7b72? Te6edf3voicemailTb4b4b4.Te6edf3remote_iconTb4b4b4.Te6edf3background_colour Tff7b72: Ta5d6ff''
Ta5d6ff"
Te6edf3classTff7b72=Ta5d6ff"size-10"
Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>

Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex-1 min-w-0"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex items-center justify-between mb-1"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex items-center min-w-0 mr-2"Tb4b4b4>
Tb4b4b4<Tff7b72p Te6edf3classTff7b72=Ta5d6ff"text-sm font-bold text-gray-900 dark:text-white truncate"Tb4b4b4>
Tff7b72{{ Te6edf3voicemailTb4b4b4.Te6edf3remote_identity_name Tff7b72|| Te6edf3$tTb4b4b4(Ta5d6ff"call.unknown"Tb4b4b4) Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72span
Te6edf3v-ifTff7b72=Ta5d6ff"Tff7b72!Te6edf3voicemailTb4b4b4.Te6edf3is_readTa5d6ff"
Te6edf3classTff7b72=Ta5d6ff"ml-2 shrink-0 size-2 inline-block rounded-full bg-blue-500"
Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72span
Te6edf3classTff7b72=Ta5d6ff"text-[10px] text-gray-500 dark:text-zinc-500 font-mono shrink-0"
Tb4b4b4>
Tff7b72{{ Te6edf3formatDateTimeTb4b4b4(Te6edf3voicemailTb4b4b4.Te6edf3timestamp Tff7b72* T79c0ff1000Tb4b4b4) Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>

Tb4b4b4<Tff7b72div
Te6edf3classTff7b72=Ta5d6ff"flex items-center text-xs text-gray-500 dark:text-zinc-400 space-x-3 mb-3"
Tb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"flex items-center gap-1"Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"clock-outline" Te6edf3classTff7b72=Ta5d6ff"size-3" Tb4b4b4/Tb4b4b4>
Tff7b72{{ Te6edf3formatDurationTb4b4b4(Te6edf3voicemailTb4b4b4.Te6edf3duration_secondsTb4b4b4) Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span
Te6edf3classTff7b72=Ta5d6ff"opacity-60 font-mono text-[10px] truncate cursor-pointer hover:text-blue-500 transition-colors"
Tb4b4b4:Te6edf3titleTff7b72=Ta5d6ff"Te6edf3voicemailTb4b4b4.Te6edf3remote_identity_hashTa5d6ff"
Tb4b4b4@Te6edf3clickTb4b4b4.Te6edf3stopTff7b72=Ta5d6ff"Te6edf3copyHashTb4b4b4(Te6edf3voicemailTb4b4b4.Te6edf3remote_identity_hashTb4b4b4)Ta5d6ff"
Tb4b4b4>Tff7b72{{ Te6edf3formatDestinationHashTb4b4b4(Te6edf3voicemailTb4b4b4.Te6edf3remote_identity_hashTb4b4b4) Tff7b72}}Tb4b4b4<Tb4b4b4/Tff7b72span
Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>

Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"mb-4"Tb4b4b4>
Tb4b4b4<Tff7b72AudioWaveformPlayer
Tb4b4b4:Te6edf3srcTff7b72=Ta5d6ff"Ta5d6ff`Ta5d6ff/api/v1/telephone/voicemails/Tffd700${Te6edf3voicemailTb4b4b4.Te6edf3idTffd700}Ta5d6ff/audioTa5d6ff`Ta5d6ff"
Tb4b4b4@Te6edf3playTff7b72=Ta5d6ff"Te6edf3markVoicemailAsReadTb4b4b4(Te6edf3voicemailTb4b4b4)Ta5d6ff"
Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>

Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex items-center gap-4"Tb4b4b4>
Tb4b4b4<Tff7b72button
Te6edf3typeTff7b72=Ta5d6ff"button"
Te6edf3classTff7b72=Ta5d6ff"text-[10px] flex items-center gap-1 text-gray-500 hover:text-blue-500 font-bold uppercase tracking-wider transition-colors"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"
Te6edf3destinationHash Tff7b72=
Te6edf3voicemailTb4b4b4.Te6edf3remote_telephony_hash Tff7b72||
Te6edf3voicemailTb4b4b4.Te6edf3remote_destination_hash Tff7b72||
Te6edf3voicemailTb4b4b4.Te6edf3remote_identity_hashTb4b4b4;
Te6edf3activeTab Tff7b72= Ta5d6ff'phone'Tb4b4b4;
Te6edf3$nextTickTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Te6edf3callTb4b4b4(Te6edf3destinationHashTb4b4b4)Tb4b4b4)Tb4b4b4;
Ta5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"phone" Te6edf3classTff7b72=Ta5d6ff"size-3" Tb4b4b4/Tb4b4b4>
Call Back
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tff7b72a
Tb4b4b4:Te6edf3hrefTff7b72=Ta5d6ff"Ta5d6ff`Ta5d6ff/api/v1/telephone/voicemails/Tffd700${Te6edf3voicemailTb4b4b4.Te6edf3idTffd700}Ta5d6ff/audioTa5d6ff`Ta5d6ff"
Tb4b4b4:Te6edf3downloadTff7b72=Ta5d6ff"Ta5d6ff`Ta5d6ffvoicemail_Tffd700${Te6edf3voicemailTb4b4b4.Te6edf3idTffd700}Ta5d6ff.opusTa5d6ff`Ta5d6ff"
Te6edf3classTff7b72=Ta5d6ff"text-[10px] flex items-center gap-1 text-gray-500 hover:text-blue-500 font-bold uppercase tracking-wider transition-colors"
Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"download" Te6edf3classTff7b72=Ta5d6ff"size-3" Tb4b4b4/Tb4b4b4>
Download
Tb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>
Tb4b4b4<Tff7b72button
Te6edf3typeTff7b72=Ta5d6ff"button"
Te6edf3classTff7b72=Ta5d6ff"text-[10px] flex items-center gap-1 text-red-500 hover:text-red-600 font-bold uppercase tracking-wider transition-colors"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3deleteVoicemailTb4b4b4(Te6edf3voicemailTb4b4b4.Te6edf3idTb4b4b4)Ta5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"delete" Te6edf3classTff7b72=Ta5d6ff"size-3" Tb4b4b4/Tb4b4b4>
Delete
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72ulTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>

T8b949e<!-- Contacts Tab -->
Tb4b4b4<Tff7b72div Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3activeTab Tff7b72=== Ta5d6ff'contacts'Ta5d6ff" Te6edf3classTff7b72=Ta5d6ff"flex-1 flex flex-col max-w-3xl mx-auto w-full"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"mb-4 flex gap-2"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"relative flex-1"Tb4b4b4>
Tb4b4b4<Tff7b72input
Te6edf3v-modelTff7b72=Ta5d6ff"Te6edf3contactsSearchTa5d6ff"
Te6edf3typeTff7b72=Ta5d6ff"text"
Te6edf3placeholderTff7b72=Ta5d6ff"Search contacts..."
Te6edf3classTff7b72=Ta5d6ff"block w-full rounded-lg border-0 py-2 pl-10 text-gray-900 dark:text-white shadow-sm ring-1 ring-inset ring-gray-300 dark:ring-zinc-800 placeholder:text-gray-400 focus:ring-2 focus:ring-inset focus:ring-blue-600 sm:text-sm dark:bg-zinc-900"
Tb4b4b4@Te6edf3inputTff7b72=Ta5d6ff"Te6edf3onContactsSearchInputTa5d6ff"
Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"pointer-events-none absolute inset-y-0 left-0 flex items-center pl-3"Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"magnify" Te6edf3classTff7b72=Ta5d6ff"size-5 text-gray-400" Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72button
Te6edf3typeTff7b72=Ta5d6ff"button"
Te6edf3classTff7b72=Ta5d6ff"rounded-lg bg-blue-600 px-3 py-2 text-sm font-semibold text-white shadow-sm hover:bg-blue-500 transition-colors flex items-center gap-2"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3openAddContactModalTa5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"plus" Te6edf3classTff7b72=Ta5d6ff"size-5" Tb4b4b4/Tb4b4b4>
Add
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>

Tb4b4b4<Tff7b72div Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3contactsTb4b4b4.Te6edf3length Tff7b72=== T79c0ff0Ta5d6ff" Te6edf3classTff7b72=Ta5d6ff"my-auto text-center"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"bg-gray-200 dark:bg-zinc-800 p-6 rounded-full inline-block mb-4"Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"account-multiple" Te6edf3classTff7b72=Ta5d6ff"size-12 text-gray-400" Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72h3 Te6edf3classTff7b72=Ta5d6ff"text-lg font-medium text-gray-900 dark:text-white"Tb4b4b4>No ContactsTb4b4b4<Tb4b4b4/Tff7b72h3Tb4b4b4>
Tb4b4b4<Tff7b72p Te6edf3classTff7b72=Ta5d6ff"text-gray-500 dark:text-zinc-400"Tb4b4b4>Add contacts to quickly call them.Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>

Tb4b4b4<Tff7b72div Te6edf3v-else Te6edf3classTff7b72=Ta5d6ff"space-y-4"Tb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3classTff7b72=Ta5d6ff"bg-white dark:bg-zinc-900 rounded-xl shadow-sm border border-gray-200 dark:border-zinc-800 overflow-hidden"
Tb4b4b4>
Tb4b4b4<Tff7b72ul Te6edf3classTff7b72=Ta5d6ff"divide-y divide-gray-100 dark:divide-zinc-800"Tb4b4b4>
Tb4b4b4<Tff7b72li
Te6edf3v-forTff7b72=Ta5d6ff"Te6edf3contact Tff7b72in Te6edf3contactsTa5d6ff"
Tb4b4b4:Te6edf3keyTff7b72=Ta5d6ff"Te6edf3contactTb4b4b4.Te6edf3idTa5d6ff"
Te6edf3classTff7b72=Ta5d6ff"px-4 py-3 hover:bg-gray-50 dark:hover:bg-zinc-800/50 transition-colors"
Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex items-center space-x-3"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"shrink-0"Tb4b4b4>
Tb4b4b4<Tff7b72LxmfUserIcon
Tb4b4b4:Te6edf3custom-imageTff7b72=Ta5d6ff"Te6edf3contactTb4b4b4.Te6edf3custom_imageTa5d6ff"
Tb4b4b4:Te6edf3icon-nameTff7b72=Ta5d6ff"Te6edf3contactTb4b4b4.Te6edf3remote_icon Tff7b72? Te6edf3contactTb4b4b4.Te6edf3remote_iconTb4b4b4.Te6edf3icon_name Tff7b72: Ta5d6ff''Ta5d6ff"
Tb4b4b4:Te6edf3icon-foreground-colourTff7b72=Ta5d6ff"
Te6edf3contactTb4b4b4.Te6edf3remote_icon Tff7b72? Te6edf3contactTb4b4b4.Te6edf3remote_iconTb4b4b4.Te6edf3foreground_colour Tff7b72: Ta5d6ff''
Ta5d6ff"
Tb4b4b4:Te6edf3icon-background-colourTff7b72=Ta5d6ff"
Te6edf3contactTb4b4b4.Te6edf3remote_icon Tff7b72? Te6edf3contactTb4b4b4.Te6edf3remote_iconTb4b4b4.Te6edf3background_colour Tff7b72: Ta5d6ff''
Ta5d6ff"
Te6edf3classTff7b72=Ta5d6ff"size-10"
Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex-1 min-w-0"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex items-center justify-between"Tb4b4b4>
Tb4b4b4<Tff7b72p Te6edf3classTff7b72=Ta5d6ff"text-sm font-bold text-gray-900 dark:text-white truncate"Tb4b4b4>
Tff7b72{{ Te6edf3contactTb4b4b4.Te6edf3name Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex items-center gap-2"Tb4b4b4>
Tb4b4b4<Tff7b72span
Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3contactTb4b4b4.Te6edf3preferred_ringtone_idTa5d6ff"
Te6edf3classTff7b72=Ta5d6ff"text-[9px] px-1.5 py-0.5 rounded bg-amber-50 dark:bg-amber-900/30 text-amber-600 dark:text-amber-400 border border-amber-100 dark:border-amber-800/50 flex items-center gap-1"
Te6edf3titleTff7b72=Ta5d6ff"Custom Ringtone Set"
Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"music" Te6edf3classTff7b72=Ta5d6ff"size-2.5" Tb4b4b4/Tb4b4b4>
Tff7b72{{ Te6edf3contactTb4b4b4.Te6edf3preferred_ringtone_id Tff7b72=== Tff7b72-T79c0ff1 Tff7b72? Ta5d6ff"Random" Tff7b72: Ta5d6ff"Custom" Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex items-center gap-1"Tb4b4b4>
Tb4b4b4<Tff7b72button
Te6edf3typeTff7b72=Ta5d6ff"button"
Te6edf3classTff7b72=Ta5d6ff"p-1.5 text-gray-400 hover:text-blue-500 transition-colors"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3openEditContactModalTb4b4b4(Te6edf3contactTb4b4b4)Ta5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"pencil" Te6edf3classTff7b72=Ta5d6ff"size-4" Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tff7b72button
Te6edf3typeTff7b72=Ta5d6ff"button"
Te6edf3classTff7b72=Ta5d6ff"p-1.5 text-gray-400 hover:text-red-500 transition-colors"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3deleteContactTb4b4b4(Te6edf3contactTb4b4b4.Te6edf3idTb4b4b4)Ta5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"delete" Te6edf3classTff7b72=Ta5d6ff"size-4" Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex items-center justify-between mt-1"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex flex-col min-w-0"Tb4b4b4>
Tb4b4b4<Tff7b72span
Te6edf3classTff7b72=Ta5d6ff"text-[10px] text-gray-500 dark:text-zinc-500 font-mono truncate cursor-pointer hover:text-blue-500 transition-colors"
Tb4b4b4:Te6edf3titleTff7b72=Ta5d6ff"Te6edf3contactTb4b4b4.Te6edf3remote_identity_hashTa5d6ff"
Tb4b4b4@Te6edf3clickTb4b4b4.Te6edf3stopTff7b72=Ta5d6ff"Te6edf3copyHashTb4b4b4(Te6edf3contactTb4b4b4.Te6edf3remote_identity_hashTb4b4b4)Ta5d6ff"
Tb4b4b4>
ID: Tff7b72{{ Te6edf3formatDestinationHashTb4b4b4(Te6edf3contactTb4b4b4.Te6edf3remote_identity_hashTb4b4b4) Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span
Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3contactTb4b4b4.Te6edf3lxmf_addressTa5d6ff"
Te6edf3classTff7b72=Ta5d6ff"text-[9px] text-gray-400 dark:text-zinc-500 font-mono truncate cursor-pointer hover:text-blue-500 transition-colors"
Tb4b4b4:Te6edf3titleTff7b72=Ta5d6ff"Te6edf3contactTb4b4b4.Te6edf3lxmf_addressTa5d6ff"
Tb4b4b4@Te6edf3clickTb4b4b4.Te6edf3stopTff7b72=Ta5d6ff"Te6edf3copyHashTb4b4b4(Te6edf3contactTb4b4b4.Te6edf3lxmf_addressTb4b4b4)Ta5d6ff"
Tb4b4b4>
LXMF: Tff7b72{{ Te6edf3formatDestinationHashTb4b4b4(Te6edf3contactTb4b4b4.Te6edf3lxmf_addressTb4b4b4) Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span
Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3contactTb4b4b4.Te6edf3lxst_addressTa5d6ff"
Te6edf3classTff7b72=Ta5d6ff"text-[9px] text-gray-400 dark:text-zinc-500 font-mono truncate cursor-pointer hover:text-blue-500 transition-colors"
Tb4b4b4:Te6edf3titleTff7b72=Ta5d6ff"Te6edf3contactTb4b4b4.Te6edf3lxst_addressTa5d6ff"
Tb4b4b4@Te6edf3clickTb4b4b4.Te6edf3stopTff7b72=Ta5d6ff"Te6edf3copyHashTb4b4b4(Te6edf3contactTb4b4b4.Te6edf3lxst_addressTb4b4b4)Ta5d6ff"
Tb4b4b4>
LXST: Tff7b72{{ Te6edf3formatDestinationHashTb4b4b4(Te6edf3contactTb4b4b4.Te6edf3lxst_addressTb4b4b4) Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72button
Te6edf3typeTff7b72=Ta5d6ff"button"
Te6edf3classTff7b72=Ta5d6ff"text-[10px] bg-blue-100 text-blue-600 dark:bg-blue-900/30 dark:text-blue-400 px-3 py-1 rounded-full font-bold uppercase tracking-wider hover:bg-blue-200 dark:hover:bg-blue-900/50 transition-colors shrink-0"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"
Te6edf3destinationHash Tff7b72=
Te6edf3contactTb4b4b4.Te6edf3remote_telephony_hash Tff7b72||
Te6edf3contactTb4b4b4.Te6edf3remote_destination_hash Tff7b72||
Te6edf3contactTb4b4b4.Te6edf3remote_identity_hashTb4b4b4;
Te6edf3activeTab Tff7b72= Ta5d6ff'phone'Tb4b4b4;
Te6edf3$nextTickTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Te6edf3callTb4b4b4(Te6edf3destinationHashTb4b4b4)Tb4b4b4)Tb4b4b4;
Ta5d6ff"
Tb4b4b4>
Call
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72ulTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>

T8b949e<!-- Ringtone Tab -->
Tb4b4b4<Tff7b72div Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3activeTab Tff7b72=== Ta5d6ff'ringtone' Tff7b72&& Te6edf3configTa5d6ff" Te6edf3classTff7b72=Ta5d6ff"flex-1 space-y-6 max-w-3xl mx-auto w-full"Tb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3classTff7b72=Ta5d6ff"bg-white dark:bg-zinc-900 rounded-xl p-6 shadow-sm border border-gray-200 dark:border-zinc-800"
Tb4b4b4>
Tb4b4b4<Tff7b72template Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3isRingtoneEditorOpenTa5d6ff"Tb4b4b4>
Tb4b4b4<Tff7b72RingtoneEditor
Tb4b4b4:Te6edf3ringtoneTff7b72=Ta5d6ff"Te6edf3editingRingtoneForAudioTa5d6ff"
Tb4b4b4@Te6edf3closeTff7b72=Ta5d6ff"Te6edf3isRingtoneEditorOpen Tff7b72= Tff7b72falseTa5d6ff"
Tb4b4b4@Te6edf3savedTff7b72=Ta5d6ff"Te6edf3onRingtoneSavedTa5d6ff"
Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72templateTb4b4b4>
Tb4b4b4<Tff7b72template Te6edf3v-elseTb4b4b4>
Tb4b4b4<Tff7b72h3
Te6edf3classTff7b72=Ta5d6ff"text-sm font-bold text-gray-900 dark:text-white uppercase tracking-wider mb-6 flex items-center gap-2"
Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"music" Te6edf3classTff7b72=Ta5d6ff"size-5 text-blue-500" Tb4b4b4/Tb4b4b4>
Tff7b72{{ Te6edf3$tTb4b4b4(Ta5d6ff"call.ringtone_settings"Tb4b4b4) Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72h3Tb4b4b4>

Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"space-y-6"Tb4b4b4>
T8b949e<!-- Enabled Toggle & Volume -->
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex flex-col md:flex-row md:items-center justify-between gap-6"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex-1"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex items-center justify-between mb-1"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"text-sm font-semibold text-gray-900 dark:text-white"Tb4b4b4>
Tff7b72{{ Te6edf3$tTb4b4b4(Ta5d6ff"call.enable_custom_ringtone"Tb4b4b4) Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72button
Te6edf3classTff7b72=Ta5d6ff"relative inline-flex h-6 w-11 shrink-0 cursor-pointer rounded-full border-2 border-transparent transition-colors duration-200 ease-in-out focus:outline-none"
Tb4b4b4:Te6edf3classTff7b72=Ta5d6ff"
Te6edf3configTb4b4b4.Te6edf3custom_ringtone_enabled
Tff7b72? Ta5d6ff'bg-blue-600'
Tff7b72: Ta5d6ff'bg-gray-200 dark:bg-zinc-700'
Ta5d6ff"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"
Te6edf3configTb4b4b4.Te6edf3custom_ringtone_enabled Tff7b72= Tff7b72!Te6edf3configTb4b4b4.Te6edf3custom_ringtone_enabledTb4b4b4;
Te6edf3updateConfigTb4b4b4(Tb4b4b4{
Te6edf3custom_ringtone_enabledTff7b72: Te6edf3configTb4b4b4.Te6edf3custom_ringtone_enabledTb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Ta5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72span
Te6edf3classTff7b72=Ta5d6ff"pointer-events-none inline-block h-5 w-5 transform rounded-full bg-white shadow ring-0 transition duration-200 ease-in-out"
Tb4b4b4:Te6edf3classTff7b72=Ta5d6ff"
Te6edf3configTb4b4b4.Te6edf3custom_ringtone_enabled
Tff7b72? Ta5d6ff'translate-x-5'
Tff7b72: Ta5d6ff'translate-x-0'
Ta5d6ff"
Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"text-xs text-gray-500 dark:text-zinc-400"Tb4b4b4>
Tff7b72{{ Te6edf3$tTb4b4b4(Ta5d6ff"call.enable_custom_ringtone_description"Tb4b4b4) Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>

Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex-1 md:max-w-xs"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex items-center justify-between mb-2"Tb4b4b4>
Tb4b4b4<Tff7b72label
Te6edf3classTff7b72=Ta5d6ff"text-xs font-bold text-gray-500 dark:text-zinc-400 uppercase tracking-wider"
Tb4b4b4>
Tff7b72{{ Te6edf3$tTb4b4b4(Ta5d6ff"call.ringtone_volume"Tb4b4b4) Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72labelTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"text-xs font-mono text-gray-400"
Tb4b4b4>Tff7b72{{ Te6edf3configTb4b4b4.Te6edf3ringtone_volume Tff7b72}}%Tb4b4b4<Tb4b4b4/Tff7b72span
Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72input
Te6edf3v-modelTb4b4b4.Te6edf3numberTff7b72=Ta5d6ff"Te6edf3configTb4b4b4.Te6edf3ringtone_volumeTa5d6ff"
Te6edf3typeTff7b72=Ta5d6ff"range"
Te6edf3minTff7b72=Ta5d6ff"0"
Te6edf3maxTff7b72=Ta5d6ff"100"
Te6edf3classTff7b72=Ta5d6ff"w-full h-1.5 bg-gray-200 dark:bg-zinc-700 rounded-lg appearance-none cursor-pointer accent-blue-600"
Tb4b4b4@Te6edf3changeTff7b72=Ta5d6ff"Te6edf3updateConfigTb4b4b4(Tb4b4b4{ Te6edf3ringtone_volumeTff7b72: Te6edf3configTb4b4b4.Te6edf3ringtone_volume Tb4b4b4}Tb4b4b4)Ta5d6ff"
Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>

T8b949e<!-- Tone Generator Settings -->
Tb4b4b4<Tff7b72div
Te6edf3classTff7b72=Ta5d6ff"flex flex-col md:flex-row md:items-center justify-between gap-6 pt-4 border-t border-gray-100 dark:border-zinc-800/50"
Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex-1"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex items-center justify-between mb-1"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"text-sm font-semibold text-gray-900 dark:text-white"Tb4b4b4>
Tone Generator
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72button
Te6edf3classTff7b72=Ta5d6ff"relative inline-flex h-6 w-11 shrink-0 cursor-pointer rounded-full border-2 border-transparent transition-colors duration-200 ease-in-out focus:outline-none"
Tb4b4b4:Te6edf3classTff7b72=Ta5d6ff"
Te6edf3configTb4b4b4.Te6edf3telephone_tone_generator_enabled
Tff7b72? Ta5d6ff'bg-blue-600'
Tff7b72: Ta5d6ff'bg-gray-200 dark:bg-zinc-700'
Ta5d6ff"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"
Te6edf3configTb4b4b4.Te6edf3telephone_tone_generator_enabled Tff7b72=
Tff7b72!Te6edf3configTb4b4b4.Te6edf3telephone_tone_generator_enabledTb4b4b4;
Te6edf3updateConfigTb4b4b4(Tb4b4b4{
Te6edf3telephone_tone_generator_enabledTff7b72:
Te6edf3configTb4b4b4.Te6edf3telephone_tone_generator_enabledTb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Ta5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72span
Te6edf3classTff7b72=Ta5d6ff"pointer-events-none inline-block h-5 w-5 transform rounded-full bg-white shadow ring-0 transition duration-200 ease-in-out"
Tb4b4b4:Te6edf3classTff7b72=Ta5d6ff"
Te6edf3configTb4b4b4.Te6edf3telephone_tone_generator_enabled
Tff7b72? Ta5d6ff'translate-x-5'
Tff7b72: Ta5d6ff'translate-x-0'
Ta5d6ff"
Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"text-xs text-gray-500 dark:text-zinc-400"Tb4b4b4>
Play audio feedback during call dialing and disconnection.
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>

Tb4b4b4<Tff7b72div Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3configTb4b4b4.Te6edf3telephone_tone_generator_enabledTa5d6ff" Te6edf3classTff7b72=Ta5d6ff"flex-1 md:max-w-xs"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex items-center justify-between mb-2"Tb4b4b4>
Tb4b4b4<Tff7b72label
Te6edf3classTff7b72=Ta5d6ff"text-xs font-bold text-gray-500 dark:text-zinc-400 uppercase tracking-wider"
Tb4b4b4>
Tone Volume
Tb4b4b4<Tb4b4b4/Tff7b72labelTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"text-xs font-mono text-gray-400"
Tb4b4b4>Tff7b72{{ Te6edf3configTb4b4b4.Te6edf3telephone_tone_generator_volume Tff7b72}}%Tb4b4b4<Tb4b4b4/Tff7b72span
Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72input
Te6edf3v-modelTb4b4b4.Te6edf3numberTff7b72=Ta5d6ff"Te6edf3configTb4b4b4.Te6edf3telephone_tone_generator_volumeTa5d6ff"
Te6edf3typeTff7b72=Ta5d6ff"range"
Te6edf3minTff7b72=Ta5d6ff"0"
Te6edf3maxTff7b72=Ta5d6ff"100"
Te6edf3classTff7b72=Ta5d6ff"w-full h-1.5 bg-gray-200 dark:bg-zinc-700 rounded-lg appearance-none cursor-pointer accent-blue-600"
Tb4b4b4@Te6edf3changeTff7b72=Ta5d6ff"
Te6edf3updateConfigTb4b4b4(Tb4b4b4{
Te6edf3telephone_tone_generator_volumeTff7b72:
Te6edf3configTb4b4b4.Te6edf3telephone_tone_generator_volumeTb4b4b4,
Tb4b4b4}Tb4b4b4)
Ta5d6ff"
Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>

T8b949e<!-- Preferred Ringtone for Non-Contacts -->
Tb4b4b4<Tff7b72div
Te6edf3classTff7b72=Ta5d6ff"p-4 rounded-xl bg-blue-50/50 dark:bg-blue-900/10 border border-blue-100/50 dark:border-blue-900/30"
Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex flex-col md:flex-row md:items-center justify-between gap-4"Tb4b4b4>
Tb4b4b4<Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"text-sm font-semibold text-gray-900 dark:text-white"Tb4b4b4>
Tff7b72{{ Te6edf3$tTb4b4b4(Ta5d6ff"call.default_ringtone"Tb4b4b4) Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"text-xs text-gray-500 dark:text-zinc-400"Tb4b4b4>
Tff7b72{{ Te6edf3$tTb4b4b4(Ta5d6ff"call.ringtone_for_non_contacts"Tb4b4b4) Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72select
Te6edf3v-modelTff7b72=Ta5d6ff"Te6edf3configTb4b4b4.Te6edf3ringtone_preferred_idTa5d6ff"
Te6edf3classTff7b72=Ta5d6ff"input-field !py-1.5 !px-3 !text-sm !rounded-xl !border-gray-200 dark:!border-zinc-800 min-w-[200px]"
Tb4b4b4@Te6edf3changeTff7b72=Ta5d6ff"
Te6edf3updateConfigTb4b4b4(Tb4b4b4{ Te6edf3ringtone_preferred_idTff7b72: Te6edf3configTb4b4b4.Te6edf3ringtone_preferred_id Tb4b4b4}Tb4b4b4)
Ta5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72option Tb4b4b4:Te6edf3valueTff7b72=Ta5d6ff"T79c0ff0Ta5d6ff"Tb4b4b4>Tff7b72{{ Te6edf3$tTb4b4b4(Ta5d6ff"call.primary_system_default"Tb4b4b4) Tff7b72}}Tb4b4b4<Tb4b4b4/Tff7b72optionTb4b4b4>
Tb4b4b4<Tff7b72option Tb4b4b4:Te6edf3valueTff7b72=Ta5d6ff"Tff7b72-T79c0ff1Ta5d6ff"Tb4b4b4>Tff7b72{{ Te6edf3$tTb4b4b4(Ta5d6ff"call.random"Tb4b4b4) Tff7b72}}Tb4b4b4<Tb4b4b4/Tff7b72optionTb4b4b4>
Tb4b4b4<Tff7b72optgroup Tb4b4b4:Te6edf3labelTff7b72=Ta5d6ff"Te6edf3$tTb4b4b4(Ta5d6ff'call.uploaded_ringtones'Tb4b4b4)Ta5d6ff"Tb4b4b4>
Tb4b4b4<Tff7b72option Te6edf3v-forTff7b72=Ta5d6ff"Te6edf3rt Tff7b72in Te6edf3ringtonesTa5d6ff" Tb4b4b4:Te6edf3keyTff7b72=Ta5d6ff"Te6edf3rtTb4b4b4.Te6edf3idTa5d6ff" Tb4b4b4:Te6edf3valueTff7b72=Ta5d6ff"Te6edf3rtTb4b4b4.Te6edf3idTa5d6ff"Tb4b4b4>
Tff7b72{{ Te6edf3rtTb4b4b4.Te6edf3display_name Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72optionTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72optgroupTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72selectTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>

T8b949e<!-- Ringtone List -->
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"space-y-4"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex items-center justify-between"Tb4b4b4>
Tb4b4b4<Tff7b72label Te6edf3classTff7b72=Ta5d6ff"text-sm font-semibold text-gray-700 dark:text-zinc-300"Tb4b4b4>
My Ringtones
Tb4b4b4<Tb4b4b4/Tff7b72labelTb4b4b4>
Tb4b4b4<Tff7b72button
Te6edf3typeTff7b72=Ta5d6ff"button"
Te6edf3classTff7b72=Ta5d6ff"text-xs font-bold text-blue-600 dark:text-blue-400 hover:underline flex items-center gap-1"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3$refsTb4b4b4.Te6edf3ringtoneUploadTb4b4b4.Te6edf3clickTb4b4b4(Tb4b4b4)Ta5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"plus" Te6edf3classTff7b72=Ta5d6ff"size-4" Tb4b4b4/Tb4b4b4>
Upload New
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tff7b72input
Te6edf3refTff7b72=Ta5d6ff"ringtoneUpload"
Te6edf3typeTff7b72=Ta5d6ff"file"
Te6edf3classTff7b72=Ta5d6ff"hidden"
Te6edf3acceptTff7b72=Ta5d6ff"audio/*"
Tb4b4b4@Te6edf3changeTff7b72=Ta5d6ff"Te6edf3uploadRingtoneTa5d6ff"
Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>

Tb4b4b4<Tff7b72div Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3ringtonesTb4b4b4.Te6edf3length Tff7b72> T79c0ff0Ta5d6ff" Te6edf3classTff7b72=Ta5d6ff"grid gap-3"Tb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3v-forTff7b72=Ta5d6ff"Te6edf3ringtone Tff7b72in Te6edf3ringtonesTa5d6ff"
Tb4b4b4:Te6edf3keyTff7b72=Ta5d6ff"Te6edf3ringtoneTb4b4b4.Te6edf3idTa5d6ff"
Te6edf3classTff7b72=Ta5d6ff"group p-4 rounded-xl border border-gray-100 dark:border-zinc-800 bg-gray-50/50 dark:bg-zinc-800/30 flex items-center gap-4 transition-all hover:shadow-md overflow-hidden"
Tb4b4b4:Te6edf3classTff7b72=Ta5d6ff"Tb4b4b4{
Ta5d6ff'ring-2 ring-blue-500/20 bg-blue-50/20 dark:bg-blue-900/10'Tff7b72:
Te6edf3ringtoneTb4b4b4.Te6edf3is_primaryTb4b4b4,
Tb4b4b4}Ta5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex-1 min-w-0 overflow-hidden"Tb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3editingRingtoneId Tff7b72=== Te6edf3ringtoneTb4b4b4.Te6edf3idTa5d6ff"
Te6edf3classTff7b72=Ta5d6ff"flex items-center gap-2"
Tb4b4b4>
Tb4b4b4<Tff7b72input
Te6edf3v-modelTff7b72=Ta5d6ff"Te6edf3editingRingtoneNameTa5d6ff"
Te6edf3classTff7b72=Ta5d6ff"text-sm bg-white dark:bg-zinc-900 border border-gray-200 dark:border-zinc-700 rounded px-2 py-1 flex-1 min-w-0"
Tb4b4b4@Te6edf3keyupTb4b4b4.Te6edf3enterTff7b72=Ta5d6ff"Te6edf3saveRingtoneNameTa5d6ff"
Tb4b4b4@Te6edf3blurTff7b72=Ta5d6ff"Te6edf3saveRingtoneNameTa5d6ff"
Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3v-else Te6edf3classTff7b72=Ta5d6ff"flex items-center gap-2 min-w-0"Tb4b4b4>
Tb4b4b4<Tff7b72span
Te6edf3classTff7b72=Ta5d6ff"text-sm font-medium text-gray-900 dark:text-white truncate"
Tb4b4b4:Te6edf3titleTff7b72=Ta5d6ff"Te6edf3ringtoneTb4b4b4.Te6edf3display_nameTa5d6ff"
Tb4b4b4>
Tff7b72{{ Te6edf3ringtoneTb4b4b4.Te6edf3display_name Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span
Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3ringtoneTb4b4b4.Te6edf3is_primaryTa5d6ff"
Te6edf3classTff7b72=Ta5d6ff"shrink-0 text-[10px] uppercase font-bold text-blue-600 dark:text-blue-400 bg-blue-100 dark:bg-blue-900/40 px-1.5 py-0.5 rounded"
Tb4b4b4>
Primary
Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72button
Te6edf3classTff7b72=Ta5d6ff"shrink-0 opacity-0 group-hover:opacity-100 p-1 text-gray-400 hover:text-blue-500 transition-opacity"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3startEditingRingtoneTb4b4b4(Te6edf3ringtoneTb4b4b4)Ta5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"pencil" Te6edf3classTff7b72=Ta5d6ff"size-3" Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3classTff7b72=Ta5d6ff"text-[10px] text-gray-500 dark:text-zinc-500 truncate"
Tb4b4b4:Te6edf3titleTff7b72=Ta5d6ff"Te6edf3ringtoneTb4b4b4.Te6edf3filenameTa5d6ff"
Tb4b4b4>
Tff7b72{{ Te6edf3ringtoneTb4b4b4.Te6edf3filename Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>

Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex items-center gap-1"Tb4b4b4>
Tb4b4b4<Tff7b72a
Tb4b4b4:Te6edf3hrefTff7b72=Ta5d6ff"Ta5d6ff`Ta5d6ff/api/v1/telephone/ringtones/Tffd700${Te6edf3ringtoneTb4b4b4.Te6edf3idTffd700}Ta5d6ff/audio?download=1Ta5d6ff`Ta5d6ff"
Te6edf3classTff7b72=Ta5d6ff"p-2 rounded-lg hover:bg-white dark:hover:bg-zinc-800 text-gray-500 dark:text-gray-400 hover:text-blue-500 transition-colors"
Te6edf3titleTff7b72=Ta5d6ff"Download"
Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"download" Te6edf3classTff7b72=Ta5d6ff"size-5" Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>
Tb4b4b4<Tff7b72button
Te6edf3classTff7b72=Ta5d6ff"p-2 rounded-lg hover:bg-white dark:hover:bg-zinc-800 text-gray-500 dark:text-gray-400 transition-colors"
Tb4b4b4:Te6edf3titleTff7b72=Ta5d6ff"
Te6edf3isPlayingRingtone Tff7b72&& Te6edf3playingRingtoneId Tff7b72=== Te6edf3ringtoneTb4b4b4.Te6edf3id
Tff7b72? Ta5d6ff'Stop'
Tff7b72: Ta5d6ff'Preview'
Ta5d6ff"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3playRingtonePreviewTb4b4b4(Te6edf3ringtoneTb4b4b4)Ta5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon
Tb4b4b4:Te6edf3icon-nameTff7b72=Ta5d6ff"
Te6edf3isPlayingRingtone Tff7b72&& Te6edf3playingRingtoneId Tff7b72=== Te6edf3ringtoneTb4b4b4.Te6edf3id
Tff7b72? Ta5d6ff'stop'
Tff7b72: Ta5d6ff'play'
Ta5d6ff"
Te6edf3classTff7b72=Ta5d6ff"size-5"
Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tff7b72button
Te6edf3classTff7b72=Ta5d6ff"p-2 rounded-lg hover:bg-white dark:hover:bg-zinc-800 text-gray-500 dark:text-gray-400 hover:text-blue-500 transition-colors"
Te6edf3titleTff7b72=Ta5d6ff"Edit Audio"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3openRingtoneEditorTb4b4b4(Te6edf3ringtoneTb4b4b4)Ta5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"content-cut" Te6edf3classTff7b72=Ta5d6ff"size-5" Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tff7b72button
Te6edf3v-ifTff7b72=Ta5d6ff"Tff7b72!Te6edf3ringtoneTb4b4b4.Te6edf3is_primaryTa5d6ff"
Te6edf3classTff7b72=Ta5d6ff"p-2 rounded-lg hover:bg-white dark:hover:bg-zinc-800 text-gray-500 dark:text-gray-400 hover:text-blue-500 transition-colors"
Te6edf3titleTff7b72=Ta5d6ff"Set as Primary"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3setPrimaryRingtoneTb4b4b4(Te6edf3ringtoneTb4b4b4)Ta5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"star-outline" Te6edf3classTff7b72=Ta5d6ff"size-5" Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tff7b72button
Te6edf3classTff7b72=Ta5d6ff"p-2 rounded-lg hover:bg-white dark:hover:bg-zinc-800 text-gray-500 dark:text-gray-400 hover:text-red-500 transition-colors"
Te6edf3titleTff7b72=Ta5d6ff"Delete"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3deleteRingtoneTb4b4b4(Te6edf3ringtoneTb4b4b4)Ta5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"delete-outline" Te6edf3classTff7b72=Ta5d6ff"size-5" Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3v-else
Te6edf3classTff7b72=Ta5d6ff"flex flex-col items-center justify-center p-8 border-2 border-dashed border-gray-100 dark:border-zinc-800 rounded-2xl bg-gray-50/30 dark:bg-zinc-900/20"
Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon
Te6edf3icon-nameTff7b72=Ta5d6ff"music-off"
Te6edf3classTff7b72=Ta5d6ff"size-8 text-gray-300 dark:text-zinc-700 mb-2"
Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"text-xs text-gray-500 dark:text-zinc-500"Tb4b4b4>
Tff7b72{{ Te6edf3$tTb4b4b4(Ta5d6ff"call.no_custom_ringtone_uploaded"Tb4b4b4) Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72templateTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>

T8b949e<!-- Recordings Tab -->
Tb4b4b4<Tff7b72div Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3activeTab Tff7b72=== Ta5d6ff'recordings'Ta5d6ff" Te6edf3classTff7b72=Ta5d6ff"flex-1 flex flex-col max-w-3xl mx-auto w-full"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"mb-4"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"relative"Tb4b4b4>
Tb4b4b4<Tff7b72input
Te6edf3v-modelTff7b72=Ta5d6ff"Te6edf3recordingSearchTa5d6ff"
Te6edf3typeTff7b72=Ta5d6ff"text"
Te6edf3placeholderTff7b72=Ta5d6ff"Search recordings..."
Te6edf3classTff7b72=Ta5d6ff"block w-full rounded-lg border-0 py-2 pl-10 text-gray-900 dark:text-white shadow-sm ring-1 ring-inset ring-gray-300 dark:ring-zinc-800 placeholder:text-gray-400 focus:ring-2 focus:ring-inset focus:ring-blue-600 sm:text-sm dark:bg-zinc-900"
Tb4b4b4@Te6edf3inputTff7b72=Ta5d6ff"Te6edf3onRecordingSearchInputTa5d6ff"
Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"pointer-events-none absolute inset-y-0 left-0 flex items-center pl-3"Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"magnify" Te6edf3classTff7b72=Ta5d6ff"size-5 text-gray-400" Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>

Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex-1 overflow-y-auto min-h-0"Tb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3classTff7b72=Ta5d6ff"bg-white dark:bg-zinc-900 rounded-xl shadow-sm border border-gray-200 dark:border-zinc-800 overflow-hidden"
Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3recordingsTb4b4b4.Te6edf3length Tff7b72=== T79c0ff0Ta5d6ff" Te6edf3classTff7b72=Ta5d6ff"py-12 text-center"Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon
Te6edf3icon-nameTff7b72=Ta5d6ff"microphone-off"
Te6edf3classTff7b72=Ta5d6ff"size-12 text-gray-300 dark:text-zinc-700 mx-auto mb-2"
Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tff7b72p Te6edf3classTff7b72=Ta5d6ff"text-gray-500 dark:text-zinc-500 text-sm"Tb4b4b4>Tff7b72{{ Te6edf3$tTb4b4b4(Ta5d6ff"call.no_recordings"Tb4b4b4) Tff7b72}}Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72ul Te6edf3v-else Te6edf3classTff7b72=Ta5d6ff"divide-y divide-gray-100 dark:divide-zinc-800"Tb4b4b4>
Tb4b4b4<Tff7b72li
Te6edf3v-forTff7b72=Ta5d6ff"Te6edf3recording Tff7b72in Te6edf3recordingsTa5d6ff"
Tb4b4b4:Te6edf3keyTff7b72=Ta5d6ff"Te6edf3recordingTb4b4b4.Te6edf3idTa5d6ff"
Te6edf3classTff7b72=Ta5d6ff"px-4 py-4 hover:bg-gray-50 dark:hover:bg-zinc-800/50 transition-colors"
Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex items-start space-x-4"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"shrink-0"Tb4b4b4>
Tb4b4b4<Tff7b72LxmfUserIcon
Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3recordingTb4b4b4.Te6edf3remote_iconTa5d6ff"
Tb4b4b4:Te6edf3icon-nameTff7b72=Ta5d6ff"Te6edf3recordingTb4b4b4.Te6edf3remote_iconTb4b4b4.Te6edf3icon_nameTa5d6ff"
Tb4b4b4:Te6edf3icon-foreground-colourTff7b72=Ta5d6ff"Te6edf3recordingTb4b4b4.Te6edf3remote_iconTb4b4b4.Te6edf3foreground_colourTa5d6ff"
Tb4b4b4:Te6edf3icon-background-colourTff7b72=Ta5d6ff"Te6edf3recordingTb4b4b4.Te6edf3remote_iconTb4b4b4.Te6edf3background_colourTa5d6ff"
Te6edf3classTff7b72=Ta5d6ff"size-10"
Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3v-else
Te6edf3classTff7b72=Ta5d6ff"size-10 rounded-full bg-gray-100 dark:bg-zinc-800 flex items-center justify-center text-gray-400"
Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"account" Te6edf3classTff7b72=Ta5d6ff"size-6" Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex-1 min-w-0"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex items-center justify-between mb-1"Tb4b4b4>
Tb4b4b4<Tff7b72p Te6edf3classTff7b72=Ta5d6ff"text-sm font-bold text-gray-900 dark:text-white truncate"Tb4b4b4>
Tff7b72{{ Te6edf3recordingTb4b4b4.Te6edf3remote_identity_name Tff7b72|| Te6edf3$tTb4b4b4(Ta5d6ff"call.unknown"Tb4b4b4) Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"text-[10px] text-gray-500 dark:text-zinc-500 font-mono"Tb4b4b4>
Tff7b72{{ Te6edf3formatDateTimeTb4b4b4(Te6edf3recordingTb4b4b4.Te6edf3timestamp Tff7b72* T79c0ff1000Tb4b4b4) Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3classTff7b72=Ta5d6ff"flex items-center text-xs text-gray-500 dark:text-zinc-400 space-x-3 mb-3"
Tb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"flex items-center gap-1"Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"clock-outline" Te6edf3classTff7b72=Ta5d6ff"size-3" Tb4b4b4/Tb4b4b4>
Tff7b72{{ Te6edf3formatDurationTb4b4b4(Te6edf3recordingTb4b4b4.Te6edf3duration_secondsTb4b4b4) Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span
Te6edf3classTff7b72=Ta5d6ff"opacity-60 font-mono text-[10px] truncate"
Tb4b4b4@Te6edf3clickTb4b4b4.Te6edf3stopTff7b72=Ta5d6ff"Te6edf3copyHashTb4b4b4(Te6edf3recordingTb4b4b4.Te6edf3remote_identity_hashTb4b4b4)Ta5d6ff"
Tb4b4b4>Tff7b72{{ Te6edf3formatDestinationHashTb4b4b4(Te6edf3recordingTb4b4b4.Te6edf3remote_identity_hashTb4b4b4) Tff7b72}}Tb4b4b4<Tb4b4b4/Tff7b72span
Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex items-center gap-2"Tb4b4b4>
T8b949e<!-- RX Play -->
Tb4b4b4<Tff7b72button
Te6edf3typeTff7b72=Ta5d6ff"button"
Te6edf3classTff7b72=Ta5d6ff"px-2 py-1 rounded-md bg-blue-500/10 hover:bg-blue-500/20 text-blue-600 dark:text-blue-400 text-[10px] font-bold uppercase tracking-wider transition-all flex items-center gap-1"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3playRecordingTb4b4b4(Te6edf3recordingTb4b4b4, Ta5d6ff'rx'Tb4b4b4)Ta5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon
Tb4b4b4:Te6edf3icon-nameTff7b72=Ta5d6ff"
Te6edf3playingRecordingId Tff7b72=== Te6edf3recordingTb4b4b4.Te6edf3id Tff7b72&& Te6edf3playingSide Tff7b72=== Ta5d6ff'rx'
Tff7b72? Ta5d6ff'stop'
Tff7b72: Ta5d6ff'play'
Ta5d6ff"
Te6edf3classTff7b72=Ta5d6ff"size-3"
Tb4b4b4/Tb4b4b4>
Tff7b72{{ Te6edf3$tTb4b4b4(Ta5d6ff"call.remote_rx"Tb4b4b4) Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
T8b949e<!-- TX Play -->
Tb4b4b4<Tff7b72button
Te6edf3typeTff7b72=Ta5d6ff"button"
Te6edf3classTff7b72=Ta5d6ff"px-2 py-1 rounded-md bg-green-500/10 hover:bg-green-500/20 text-green-600 dark:text-green-400 text-[10px] font-bold uppercase tracking-wider transition-all flex items-center gap-1"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3playRecordingTb4b4b4(Te6edf3recordingTb4b4b4, Ta5d6ff'tx'Tb4b4b4)Ta5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon
Tb4b4b4:Te6edf3icon-nameTff7b72=Ta5d6ff"
Te6edf3playingRecordingId Tff7b72=== Te6edf3recordingTb4b4b4.Te6edf3id Tff7b72&& Te6edf3playingSide Tff7b72=== Ta5d6ff'tx'
Tff7b72? Ta5d6ff'stop'
Tff7b72: Ta5d6ff'play'
Ta5d6ff"
Te6edf3classTff7b72=Ta5d6ff"size-3"
Tb4b4b4/Tb4b4b4>
Tff7b72{{ Te6edf3$tTb4b4b4(Ta5d6ff"call.local_tx"Tb4b4b4) Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex-1"Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
T8b949e<!-- Download RX -->
Tb4b4b4<Tff7b72a
Tb4b4b4:Te6edf3hrefTff7b72=Ta5d6ff"Ta5d6ff`Ta5d6ff/api/v1/telephone/recordings/Tffd700${Te6edf3recordingTb4b4b4.Te6edf3idTffd700}Ta5d6ff/audio/rxTa5d6ff`Ta5d6ff"
Tb4b4b4:Te6edf3downloadTff7b72=Ta5d6ff"Ta5d6ff`Ta5d6ffrecording_Tffd700${Te6edf3recordingTb4b4b4.Te6edf3idTffd700}Ta5d6ff_rx.opusTa5d6ff`Ta5d6ff"
Te6edf3classTff7b72=Ta5d6ff"p-1.5 text-gray-400 hover:text-blue-500 transition-colors"
Tb4b4b4:Te6edf3titleTff7b72=Ta5d6ff"Te6edf3$tTb4b4b4(Ta5d6ff'call.download_rx'Tb4b4b4)Ta5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"download" Te6edf3classTff7b72=Ta5d6ff"size-4" Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>
T8b949e<!-- Download TX -->
Tb4b4b4<Tff7b72a
Tb4b4b4:Te6edf3hrefTff7b72=Ta5d6ff"Ta5d6ff`Ta5d6ff/api/v1/telephone/recordings/Tffd700${Te6edf3recordingTb4b4b4.Te6edf3idTffd700}Ta5d6ff/audio/txTa5d6ff`Ta5d6ff"
Tb4b4b4:Te6edf3downloadTff7b72=Ta5d6ff"Ta5d6ff`Ta5d6ffrecording_Tffd700${Te6edf3recordingTb4b4b4.Te6edf3idTffd700}Ta5d6ff_tx.opusTa5d6ff`Ta5d6ff"
Te6edf3classTff7b72=Ta5d6ff"p-1.5 text-gray-400 hover:text-green-500 transition-colors"
Tb4b4b4:Te6edf3titleTff7b72=Ta5d6ff"Te6edf3$tTb4b4b4(Ta5d6ff'call.download_tx'Tb4b4b4)Ta5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"download" Te6edf3classTff7b72=Ta5d6ff"size-4" Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>
Tb4b4b4<Tff7b72button
Te6edf3typeTff7b72=Ta5d6ff"button"
Te6edf3classTff7b72=Ta5d6ff"p-1.5 text-gray-400 hover:text-red-500 transition-colors"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3deleteRecordingTb4b4b4(Te6edf3recordingTb4b4b4.Te6edf3idTb4b4b4)Ta5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"delete" Te6edf3classTff7b72=Ta5d6ff"size-4" Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72ulTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>

T8b949e<!-- Contact Modal -->
Tb4b4b4<Tff7b72div
Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3isContactModalOpenTa5d6ff"
Te6edf3classTff7b72=Ta5d6ff"fixed inset-0 z-[150] flex items-center justify-center p-4 bg-black/60 backdrop-blur-sm transition-opacity"
Tb4b4b4@Te6edf3clickTb4b4b4.Te6edf3selfTff7b72=Ta5d6ff"Te6edf3isContactModalOpen Tff7b72= Tff7b72falseTa5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3classTff7b72=Ta5d6ff"w-full max-w-lg bg-white dark:bg-zinc-900 rounded-3xl shadow-2xl overflow-hidden transform transition-all scale-100"
Tb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3classTff7b72=Ta5d6ff"px-6 py-5 border-b border-gray-100 dark:border-zinc-800 flex items-center justify-between bg-gray-50/50 dark:bg-zinc-900/50"
Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex items-center gap-3"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"p-2 bg-blue-100 dark:bg-blue-900/30 text-blue-600 dark:text-blue-400 rounded-xl"Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"account-plus" Te6edf3classTff7b72=Ta5d6ff"size-6" Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72h3 Te6edf3classTff7b72=Ta5d6ff"text-xl font-bold text-gray-900 dark:text-white tracking-tight"Tb4b4b4>
Tff7b72{{ Te6edf3editingContact Tff7b72? Te6edf3$tTb4b4b4(Ta5d6ff"call.edit_contact"Tb4b4b4) Tff7b72: Te6edf3$tTb4b4b4(Ta5d6ff"call.add_contact"Tb4b4b4) Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72h3Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72button
Te6edf3typeTff7b72=Ta5d6ff"button"
Te6edf3classTff7b72=Ta5d6ff"p-2 text-gray-400 hover:text-gray-600 dark:hover:text-zinc-200 hover:bg-gray-100 dark:hover:bg-zinc-800 rounded-full transition-all"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3isContactModalOpen Tff7b72= Tff7b72falseTa5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"close" Te6edf3classTff7b72=Ta5d6ff"size-6" Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>

Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"p-6 space-y-6"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"space-y-4"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex flex-col items-center justify-center pb-4"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"relative group"Tb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3classTff7b72=Ta5d6ff"size-24 rounded-full overflow-hidden bg-gray-100 dark:bg-zinc-800 border-2 border-dashed border-gray-300 dark:border-zinc-700 flex items-center justify-center"
Tb4b4b4>
Tb4b4b4<Tff7b72img
Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3contactFormTb4b4b4.Te6edf3custom_imageTa5d6ff"
Tb4b4b4:Te6edf3srcTff7b72=Ta5d6ff"Te6edf3contactFormTb4b4b4.Te6edf3custom_imageTa5d6ff"
Te6edf3classTff7b72=Ta5d6ff"w-full h-full object-cover"
Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3v-else Te6edf3icon-nameTff7b72=Ta5d6ff"camera-plus" Te6edf3classTff7b72=Ta5d6ff"size-8 text-gray-400" Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72button
Te6edf3typeTff7b72=Ta5d6ff"button"
Te6edf3classTff7b72=Ta5d6ff"absolute inset-0 flex items-center justify-center bg-black/40 text-white opacity-0 group-hover:opacity-100 transition-opacity rounded-full"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3$refsTb4b4b4.Te6edf3contactImageInputTb4b4b4.Te6edf3clickTb4b4b4(Tb4b4b4)Ta5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"text-xs font-bold"Tb4b4b4>Tff7b72{{
Te6edf3contactFormTb4b4b4.Te6edf3custom_image Tff7b72? Ta5d6ff"Change" Tff7b72: Ta5d6ff"Upload"
Tff7b72}}Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tff7b72button
Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3contactFormTb4b4b4.Te6edf3custom_imageTa5d6ff"
Te6edf3typeTff7b72=Ta5d6ff"button"
Te6edf3classTff7b72=Ta5d6ff"absolute -top-1 -right-1 p-1 bg-red-500 text-white rounded-full shadow-lg hover:bg-red-600 transition-colors"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3contactFormTb4b4b4.Te6edf3custom_image Tff7b72= Tff7b72nullTa5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"close" Te6edf3classTff7b72=Ta5d6ff"size-3" Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72input
Te6edf3refTff7b72=Ta5d6ff"contactImageInput"
Te6edf3typeTff7b72=Ta5d6ff"file"
Te6edf3classTff7b72=Ta5d6ff"hidden"
Te6edf3acceptTff7b72=Ta5d6ff"image/*"
Tb4b4b4@Te6edf3changeTff7b72=Ta5d6ff"Te6edf3onContactImageChangeTa5d6ff"
Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tff7b72p Te6edf3classTff7b72=Ta5d6ff"text-[10px] text-gray-400 mt-2 uppercase font-bold tracking-widest"Tb4b4b4>Profile ImageTb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72label
Te6edf3classTff7b72=Ta5d6ff"block text-xs font-bold text-gray-500 dark:text-zinc-400 uppercase tracking-wider mb-1.5 ml-1"
Tb4b4b4>
Tff7b72{{ Te6edf3$tTb4b4b4(Ta5d6ff"call.contact_name"Tb4b4b4) Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72labelTb4b4b4>
Tb4b4b4<Tff7b72input Te6edf3v-modelTff7b72=Ta5d6ff"Te6edf3contactFormTb4b4b4.Te6edf3nameTa5d6ff" Te6edf3typeTff7b72=Ta5d6ff"text" Te6edf3classTff7b72=Ta5d6ff"input-field" Te6edf3placeholderTff7b72=Ta5d6ff"e.g. John Doe" Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72label
Te6edf3classTff7b72=Ta5d6ff"block text-xs font-bold text-gray-500 dark:text-zinc-400 uppercase tracking-wider mb-1.5 ml-1"
Tb4b4b4>
Tff7b72{{ Te6edf3$tTb4b4b4(Ta5d6ff"call.identity_hash"Tb4b4b4) Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72labelTb4b4b4>
Tb4b4b4<Tff7b72input
Te6edf3v-modelTff7b72=Ta5d6ff"Te6edf3contactFormTb4b4b4.Te6edf3remote_identity_hashTa5d6ff"
Te6edf3typeTff7b72=Ta5d6ff"text"
Te6edf3classTff7b72=Ta5d6ff"input-field font-mono text-sm"
Te6edf3placeholderTff7b72=Ta5d6ff"e.g. a39610c89d18bb48c73e429582423c24"
Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"grid grid-cols-1 sm:grid-cols-2 gap-4"Tb4b4b4>
Tb4b4b4<Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72label
Te6edf3classTff7b72=Ta5d6ff"block text-xs font-bold text-gray-500 dark:text-zinc-400 uppercase tracking-wider mb-1.5 ml-1"
Tb4b4b4>
Tff7b72{{ Te6edf3$tTb4b4b4(Ta5d6ff"app.lxmf_address"Tb4b4b4) Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72labelTb4b4b4>
Tb4b4b4<Tff7b72input
Te6edf3v-modelTff7b72=Ta5d6ff"Te6edf3contactFormTb4b4b4.Te6edf3lxmf_addressTa5d6ff"
Te6edf3typeTff7b72=Ta5d6ff"text"
Te6edf3classTff7b72=Ta5d6ff"input-field font-mono text-xs"
Te6edf3placeholderTff7b72=Ta5d6ff"Optional"
Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72label
Te6edf3classTff7b72=Ta5d6ff"block text-xs font-bold text-gray-500 dark:text-zinc-400 uppercase tracking-wider mb-1.5 ml-1"
Tb4b4b4>
LXST Address
Tb4b4b4<Tb4b4b4/Tff7b72labelTb4b4b4>
Tb4b4b4<Tff7b72input
Te6edf3v-modelTff7b72=Ta5d6ff"Te6edf3contactFormTb4b4b4.Te6edf3lxst_addressTa5d6ff"
Te6edf3typeTff7b72=Ta5d6ff"text"
Te6edf3classTff7b72=Ta5d6ff"input-field font-mono text-xs"
Te6edf3placeholderTff7b72=Ta5d6ff"Optional"
Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72label
Te6edf3classTff7b72=Ta5d6ff"block text-xs font-bold text-gray-500 dark:text-zinc-400 uppercase tracking-wider mb-1.5 ml-1"
Tb4b4b4>
Tff7b72{{ Te6edf3$tTb4b4b4(Ta5d6ff"call.preferred_ringtone"Tb4b4b4) Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72labelTb4b4b4>
Tb4b4b4<Tff7b72select Te6edf3v-modelTff7b72=Ta5d6ff"Te6edf3contactFormTb4b4b4.Te6edf3preferred_ringtone_idTa5d6ff" Te6edf3classTff7b72=Ta5d6ff"input-field"Tb4b4b4>
Tb4b4b4<Tff7b72option Tb4b4b4:Te6edf3valueTff7b72=Ta5d6ff"Tff7b72nullTa5d6ff"Tb4b4b4>Tff7b72{{ Te6edf3$tTb4b4b4(Ta5d6ff"call.default_global_setting"Tb4b4b4) Tff7b72}}Tb4b4b4<Tb4b4b4/Tff7b72optionTb4b4b4>
Tb4b4b4<Tff7b72option Tb4b4b4:Te6edf3valueTff7b72=Ta5d6ff"Tff7b72-T79c0ff1Ta5d6ff"Tb4b4b4>Tff7b72{{ Te6edf3$tTb4b4b4(Ta5d6ff"call.random"Tb4b4b4) Tff7b72}}Tb4b4b4<Tb4b4b4/Tff7b72optionTb4b4b4>
Tb4b4b4<Tff7b72optgroup Tb4b4b4:Te6edf3labelTff7b72=Ta5d6ff"Te6edf3$tTb4b4b4(Ta5d6ff'call.uploaded_ringtones'Tb4b4b4)Ta5d6ff"Tb4b4b4>
Tb4b4b4<Tff7b72option Te6edf3v-forTff7b72=Ta5d6ff"Te6edf3rt Tff7b72in Te6edf3ringtonesTa5d6ff" Tb4b4b4:Te6edf3keyTff7b72=Ta5d6ff"Te6edf3rtTb4b4b4.Te6edf3idTa5d6ff" Tb4b4b4:Te6edf3valueTff7b72=Ta5d6ff"Te6edf3rtTb4b4b4.Te6edf3idTa5d6ff"Tb4b4b4>
Tff7b72{{ Te6edf3rtTb4b4b4.Te6edf3display_name Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72optionTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72optgroupTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72selectTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>

Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex gap-3 mt-8"Tb4b4b4>
Tb4b4b4<Tff7b72button
Te6edf3typeTff7b72=Ta5d6ff"button"
Te6edf3classTff7b72=Ta5d6ff"flex-1 px-6 py-3 rounded-2xl bg-gray-100 dark:bg-zinc-800 text-gray-700 dark:text-zinc-300 font-bold hover:bg-gray-200 dark:hover:bg-zinc-700 transition-all active:scale-95"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3isContactModalOpen Tff7b72= Tff7b72falseTa5d6ff"
Tb4b4b4>
Tff7b72{{ Te6edf3$tTb4b4b4(Ta5d6ff"common.cancel"Tb4b4b4) Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tff7b72button
Te6edf3typeTff7b72=Ta5d6ff"button"
Te6edf3classTff7b72=Ta5d6ff"flex-[2] px-6 py-3 rounded-2xl bg-blue-600 text-white font-bold shadow-lg shadow-blue-600/20 hover:bg-blue-500 transition-all active:scale-95"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3saveContactTb4b4b4(Te6edf3contactFormTb4b4b4)Ta5d6ff"
Tb4b4b4>
Tff7b72{{ Te6edf3$tTb4b4b4(Ta5d6ff"call.save_contact"Tb4b4b4) Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72templateTb4b4b4>

Tb4b4b4<Tff7b72scriptTb4b4b4>
Tff7b72import Te6edf3GlobalState Tff7b72from Ta5d6ff"../../js/GlobalState"Tb4b4b4;
Tff7b72import Te6edf3GlobalEmitter Tff7b72from Ta5d6ff"../../js/GlobalEmitter"Tb4b4b4;
Tff7b72import Te6edf3Utils Tff7b72from Ta5d6ff"../../js/Utils"Tb4b4b4;
Tff7b72import Te6edf3Compressor Tff7b72from Ta5d6ff"compressorjs"Tb4b4b4;
Tff7b72import Te6edf3MaterialDesignIcon Tff7b72from Ta5d6ff"../MaterialDesignIcon.vue"Tb4b4b4;
Tff7b72import Te6edf3LxmfUserIcon Tff7b72from Ta5d6ff"../LxmfUserIcon.vue"Tb4b4b4;
Tff7b72import Te6edf3Toggle Tff7b72from Ta5d6ff"../forms/Toggle.vue"Tb4b4b4;
Tff7b72import Te6edf3ToastUtils Tff7b72from Ta5d6ff"../../js/ToastUtils"Tb4b4b4;
Tff7b72import Te6edf3RingtoneEditor Tff7b72from Ta5d6ff"./RingtoneEditor.vue"Tb4b4b4;
Tff7b72import Te6edf3AudioWaveformPlayer Tff7b72from Ta5d6ff"../messages/AudioWaveformPlayer.vue"Tb4b4b4;

Tff7b72export Tff7b72default Tb4b4b4{
Te6edf3nameTff7b72: Ta5d6ff"CallPage"Tb4b4b4,
Te6edf3componentsTff7b72: Tb4b4b4{
Te6edf3MaterialDesignIconTb4b4b4,
Te6edf3LxmfUserIconTb4b4b4,
Te6edf3ToggleTb4b4b4,
Te6edf3RingtoneEditorTb4b4b4,
Te6edf3AudioWaveformPlayerTb4b4b4,
Tb4b4b4}Tb4b4b4,
Te6edf3dataTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72return Tb4b4b4{
Te6edf3configTff7b72: Tff7b72nullTb4b4b4,
Te6edf3activeCallTff7b72: Tff7b72nullTb4b4b4,
Te6edf3audioProfilesTff7b72: Tb4b4b4[Tb4b4b4]Tb4b4b4,
Te6edf3selectedAudioProfileIdTff7b72: Tff7b72nullTb4b4b4,
Te6edf3destinationHashTff7b72: Ta5d6ff""Tb4b4b4,
Te6edf3isShowingStatsTff7b72: Tff7b72falseTb4b4b4,
Te6edf3callHistoryTff7b72: Tb4b4b4[Tb4b4b4]Tb4b4b4,
Te6edf3callHistorySearchTff7b72: Ta5d6ff""Tb4b4b4,
Te6edf3callHistoryLimitTff7b72: T79c0ff10Tb4b4b4,
Te6edf3callHistoryOffsetTff7b72: T79c0ff0Tb4b4b4,
Te6edf3hasMoreCallHistoryTff7b72: Tff7b72falseTb4b4b4,
Te6edf3isCallEndedTff7b72: Tff7b72falseTb4b4b4,
Te6edf3wasDeclinedTff7b72: Tff7b72falseTb4b4b4,
Te6edf3wasVoicemailTff7b72: Tff7b72falseTb4b4b4,
Te6edf3lastCallTff7b72: Tff7b72nullTb4b4b4,
Te6edf3endedTimeoutTff7b72: Tff7b72nullTb4b4b4,
Te6edf3activeTabTff7b72: Ta5d6ff"phone"Tb4b4b4,
Te6edf3voicemailsTff7b72: Tb4b4b4[Tb4b4b4]Tb4b4b4,
Te6edf3unreadVoicemailsCountTff7b72: T79c0ff0Tb4b4b4,
Te6edf3voicemailStatusTff7b72: Tb4b4b4{
Te6edf3has_espeakTff7b72: Tff7b72falseTb4b4b4,
Te6edf3has_ffmpegTff7b72: Tff7b72falseTb4b4b4,
Te6edf3is_recordingTff7b72: Tff7b72falseTb4b4b4,
Te6edf3is_greeting_recordingTff7b72: Tff7b72falseTb4b4b4,
Te6edf3has_greetingTff7b72: Tff7b72falseTb4b4b4,
Tb4b4b4}Tb4b4b4,
Te6edf3isGeneratingGreetingTff7b72: Tff7b72falseTb4b4b4,
Te6edf3isUploadingGreetingTff7b72: Tff7b72falseTb4b4b4,
Te6edf3isUploadingRingtoneTff7b72: Tff7b72falseTb4b4b4,
Te6edf3playingVoicemailIdTff7b72: Tff7b72nullTb4b4b4,
Te6edf3audioPlayerTff7b72: Tff7b72nullTb4b4b4,
Te6edf3isPlayingGreetingTff7b72: Tff7b72falseTb4b4b4,
Te6edf3isPlayingRingtoneTff7b72: Tff7b72falseTb4b4b4,
Te6edf3ringtoneStatusTff7b72: Tb4b4b4{
Te6edf3has_custom_ringtoneTff7b72: Tff7b72falseTb4b4b4,
Te6edf3enabledTff7b72: Tff7b72falseTb4b4b4,
Tb4b4b4}Tb4b4b4,
Te6edf3ringtonesTff7b72: Tb4b4b4[Tb4b4b4]Tb4b4b4,
Te6edf3editingRingtoneIdTff7b72: Tff7b72nullTb4b4b4,
Te6edf3editingRingtoneNameTff7b72: Ta5d6ff""Tb4b4b4,
Te6edf3elapsedTimeIntervalTff7b72: Tff7b72nullTb4b4b4,
Te6edf3voicemailSearchTff7b72: Ta5d6ff""Tb4b4b4,
Te6edf3discoverySearchTff7b72: Ta5d6ff""Tb4b4b4,
Te6edf3discoveryAnnouncesTff7b72: Tb4b4b4[Tb4b4b4]Tb4b4b4,
Te6edf3totalDiscoveryCountTff7b72: T79c0ff0Tb4b4b4,
Te6edf3discoveryLimitTff7b72: T79c0ff10Tb4b4b4,
Te6edf3discoveryOffsetTff7b72: T79c0ff0Tb4b4b4,
Te6edf3hasMoreDiscoveryTff7b72: Tff7b72trueTb4b4b4,
Te6edf3contactsSearchTff7b72: Ta5d6ff""Tb4b4b4,
Te6edf3contactsTff7b72: Tb4b4b4[Tb4b4b4]Tb4b4b4,
Te6edf3isContactModalOpenTff7b72: Tff7b72falseTb4b4b4,
Te6edf3editingContactTff7b72: Tff7b72nullTb4b4b4,
Te6edf3contactFormTff7b72: Tb4b4b4{
Te6edf3nameTff7b72: Ta5d6ff""Tb4b4b4,
Te6edf3remote_identity_hashTff7b72: Ta5d6ff""Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Te6edf3searchDebounceTimeoutTff7b72: Tff7b72nullTb4b4b4,
Te6edf3isVoicemailSettingsExpandedTff7b72: Tff7b72falseTb4b4b4,
Te6edf3selectedSuggestionIndexTff7b72: Tff7b72-T79c0ff1Tb4b4b4,
Te6edf3isCallInputFocusedTff7b72: Tff7b72falseTb4b4b4,
Te6edf3recordingsTff7b72: Tb4b4b4[Tb4b4b4]Tb4b4b4,
Te6edf3isMicMutingTff7b72: Tff7b72falseTb4b4b4,
Te6edf3isSpeakerMutingTff7b72: Tff7b72falseTb4b4b4,
Te6edf3recordingSearchTff7b72: Ta5d6ff""Tb4b4b4,
Te6edf3playingRecordingIdTff7b72: Tff7b72nullTb4b4b4,
Te6edf3playingSideTff7b72: Tff7b72nullTb4b4b4,
Te6edf3isRingtoneEditorOpenTff7b72: Tff7b72falseTb4b4b4,
Te6edf3editingRingtoneForAudioTff7b72: Tff7b72nullTb4b4b4,
Te6edf3localMicMutedTff7b72: Tff7b72falseTb4b4b4,
Te6edf3localSpeakerMutedTff7b72: Tff7b72falseTb4b4b4,
Te6edf3initiationStatusTff7b72: Tff7b72nullTb4b4b4,
Te6edf3initiationTargetHashTff7b72: Tff7b72nullTb4b4b4,
Te6edf3initiationTargetNameTff7b72: Tff7b72nullTb4b4b4,
Te6edf3audioWsTff7b72: Tff7b72nullTb4b4b4,
Te6edf3audioCtxTff7b72: Tff7b72nullTb4b4b4,
Te6edf3audioStreamTff7b72: Tff7b72nullTb4b4b4,
Te6edf3audioProcessorTff7b72: Tff7b72nullTb4b4b4,
Te6edf3audioWorkletNodeTff7b72: Tff7b72nullTb4b4b4,
Te6edf3audioSilentGainTff7b72: Tff7b72nullTb4b4b4,
Te6edf3audioFrameMsTff7b72: T79c0ff60Tb4b4b4,
Te6edf3audioInputDevicesTff7b72: Tb4b4b4[Tb4b4b4]Tb4b4b4,
Te6edf3audioOutputDevicesTff7b72: Tb4b4b4[Tb4b4b4]Tb4b4b4,
Te6edf3selectedAudioInputIdTff7b72: Tff7b72nullTb4b4b4,
Te6edf3selectedAudioOutputIdTff7b72: Tff7b72nullTb4b4b4,
Te6edf3remoteAudioElTff7b72: Tff7b72nullTb4b4b4,
Tb4b4b4}Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3computedTff7b72: Tb4b4b4{
Te6edf3isMicMutedTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72return Tff7b72thisTb4b4b4.Te6edf3localMicMutedTb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3isSpeakerMutedTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72return Tff7b72thisTb4b4b4.Te6edf3localSpeakerMutedTb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3elapsedTimeTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Tff7b72thisTb4b4b4.Te6edf3activeCallTff7b72?Tb4b4b4.Te6edf3call_start_timeTb4b4b4) Tb4b4b4{
Tff7b72return Tff7b72nullTb4b4b4;
Tb4b4b4}
Tff7b72const Te6edf3elapsed Tff7b72= Tffa657MathTb4b4b4.Te6edf3floorTb4b4b4(Tffa657DateTb4b4b4.Te6edf3nowTb4b4b4(Tb4b4b4) Tff7b72/ T79c0ff1000 Tff7b72- Tff7b72thisTb4b4b4.Te6edf3activeCallTb4b4b4.Te6edf3call_start_timeTb4b4b4)Tb4b4b4;
Tff7b72return Te6edf3UtilsTb4b4b4.Te6edf3formatMinutesSecondsTb4b4b4(Te6edf3elapsedTb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3callDurationTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Tff7b72thisTb4b4b4.Te6edf3isCallEnded Tff7b72|| Tff7b72!Tff7b72thisTb4b4b4.Te6edf3lastCallTff7b72?Tb4b4b4.Te6edf3call_start_timeTb4b4b4) Tb4b4b4{
Tff7b72return Tff7b72nullTb4b4b4;
Tb4b4b4}
Tff7b72const Te6edf3duration Tff7b72= Tffa657MathTb4b4b4.Te6edf3floorTb4b4b4(Tffa657DateTb4b4b4.Te6edf3nowTb4b4b4(Tb4b4b4) Tff7b72/ T79c0ff1000 Tff7b72- Tff7b72thisTb4b4b4.Te6edf3lastCallTb4b4b4.Te6edf3call_start_timeTb4b4b4)Tb4b4b4;
Tff7b72return Te6edf3UtilsTb4b4b4.Te6edf3formatMinutesSecondsTb4b4b4(Te6edf3durationTb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3newCallSuggestionsTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Tff7b72thisTb4b4b4.Te6edf3isCallInputFocusedTb4b4b4) Tff7b72return Tb4b4b4[Tb4b4b4]Tb4b4b4;

Tff7b72const Te6edf3search Tff7b72= Tff7b72thisTb4b4b4.Te6edf3destinationHashTb4b4b4.Te6edf3toLowerCaseTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3trimTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3suggestions Tff7b72= Tb4b4b4[Tb4b4b4]Tb4b4b4;
Tff7b72const Te6edf3seenHashes Tff7b72= Tff7b72new Tffa657SetTb4b4b4(Tb4b4b4)Tb4b4b4;

T8b949e// 1. Check contacts
Tff7b72thisTb4b4b4.Te6edf3contactsTb4b4b4.Te6edf3forEachTb4b4b4(Tb4b4b4(Te6edf3cTb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3seenHashesTb4b4b4.Te6edf3hasTb4b4b4(Te6edf3cTb4b4b4.Te6edf3remote_identity_hashTb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(
Tff7b72!Te6edf3search Tff7b72||
Te6edf3cTb4b4b4.Te6edf3nameTb4b4b4.Te6edf3toLowerCaseTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3includesTb4b4b4(Te6edf3searchTb4b4b4) Tff7b72||
Te6edf3cTb4b4b4.Te6edf3remote_identity_hashTb4b4b4.Te6edf3toLowerCaseTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3includesTb4b4b4(Te6edf3searchTb4b4b4)
Tb4b4b4) Tb4b4b4{
Te6edf3suggestionsTb4b4b4.Te6edf3pushTb4b4b4(Tb4b4b4{
Te6edf3nameTff7b72: Te6edf3cTb4b4b4.Te6edf3nameTb4b4b4,
Te6edf3hashTff7b72: Te6edf3cTb4b4b4.Te6edf3remote_telephony_hash Tff7b72|| Te6edf3cTb4b4b4.Te6edf3remote_destination_hash Tff7b72|| Te6edf3cTb4b4b4.Te6edf3remote_identity_hashTb4b4b4,
Te6edf3typeTff7b72: Ta5d6ff"contact"Tb4b4b4,
Te6edf3iconTff7b72: Ta5d6ff"account"Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3seenHashesTb4b4b4.Te6edf3addTb4b4b4(Te6edf3cTb4b4b4.Te6edf3remote_identity_hashTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}Tb4b4b4)Tb4b4b4;

T8b949e// 2. Check call history
Tff7b72thisTb4b4b4.Te6edf3callHistoryTb4b4b4.Te6edf3forEachTb4b4b4(Tb4b4b4(Te6edf3hTb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3seenHashesTb4b4b4.Te6edf3hasTb4b4b4(Te6edf3hTb4b4b4.Te6edf3remote_identity_hashTb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(
Tff7b72!Te6edf3search Tff7b72||
Tb4b4b4(Te6edf3hTb4b4b4.Te6edf3remote_identity_name Tff7b72&& Te6edf3hTb4b4b4.Te6edf3remote_identity_nameTb4b4b4.Te6edf3toLowerCaseTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3includesTb4b4b4(Te6edf3searchTb4b4b4)Tb4b4b4) Tff7b72||
Te6edf3hTb4b4b4.Te6edf3remote_identity_hashTb4b4b4.Te6edf3toLowerCaseTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3includesTb4b4b4(Te6edf3searchTb4b4b4)
Tb4b4b4) Tb4b4b4{
Te6edf3suggestionsTb4b4b4.Te6edf3pushTb4b4b4(Tb4b4b4{
Te6edf3nameTff7b72: Te6edf3hTb4b4b4.Te6edf3remote_identity_name Tff7b72|| Te6edf3hTb4b4b4.Te6edf3remote_identity_hashTb4b4b4.Te6edf3substringTb4b4b4(T79c0ff0Tb4b4b4, T79c0ff8Tb4b4b4)Tb4b4b4,
Te6edf3hashTff7b72: Te6edf3hTb4b4b4.Te6edf3remote_telephony_hash Tff7b72|| Te6edf3hTb4b4b4.Te6edf3remote_destination_hash Tff7b72|| Te6edf3hTb4b4b4.Te6edf3remote_identity_hashTb4b4b4,
Te6edf3typeTff7b72: Ta5d6ff"history"Tb4b4b4,
Te6edf3iconTff7b72: Ta5d6ff"history"Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3seenHashesTb4b4b4.Te6edf3addTb4b4b4(Te6edf3hTb4b4b4.Te6edf3remote_identity_hashTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}Tb4b4b4)Tb4b4b4;

Tff7b72return Te6edf3suggestionsTb4b4b4.Te6edf3sliceTb4b4b4(T79c0ff0Tb4b4b4, T79c0ff8Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Te6edf3watchTff7b72: Tb4b4b4{
Te6edf3destinationHashTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3selectedSuggestionIndex Tff7b72= Tff7b72-T79c0ff1Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3activeTabTb4b4b4(Te6edf3newTabTb4b4b4) Tb4b4b4{
Te6edf3GlobalStateTb4b4b4.Te6edf3activeCallTab Tff7b72= Te6edf3newTabTb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3newTab Tff7b72=== Ta5d6ff"recordings"Tb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3getRecordingsTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Te6edf3mountedTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3getConfigTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3getAudioProfilesTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3getStatusTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3getHistoryTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3getVoicemailsTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3getRecordingsTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3getContactsTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3getDiscoveryTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3getVoicemailStatusTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3getRingtonesTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3getRingtoneStatusTb4b4b4(Tb4b4b4)Tb4b4b4;

Te6edf3GlobalEmitterTb4b4b4.Te6edf3onTb4b4b4(Ta5d6ff"telephone-history-updated"Tb4b4b4, Tff7b72thisTb4b4b4.Te6edf3getHistoryTb4b4b4)Tb4b4b4;
Te6edf3GlobalEmitterTb4b4b4.Te6edf3onTb4b4b4(Ta5d6ff"telephone-history-updated"Tb4b4b4, Tff7b72thisTb4b4b4.Te6edf3getVoicemailsTb4b4b4)Tb4b4b4;

T8b949e// poll for status
Tff7b72thisTb4b4b4.Te6edf3statusInterval Tff7b72= Te6edf3setIntervalTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3getStatusTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3getVoicemailStatusTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3getRingtoneStatusTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4, T79c0ff1000Tb4b4b4)Tb4b4b4;

T8b949e// poll for history/voicemails less frequently
Tff7b72thisTb4b4b4.Te6edf3historyInterval Tff7b72= Te6edf3setIntervalTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3getHistoryTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3getVoicemailsTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3getRecordingsTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3getContactsTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3getDiscoveryTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4, T79c0ff10000Tb4b4b4)Tb4b4b4;

T8b949e// update elapsed time every second
Tff7b72thisTb4b4b4.Te6edf3elapsedTimeInterval Tff7b72= Te6edf3setIntervalTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3$forceUpdateTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4, T79c0ff1000Tb4b4b4)Tb4b4b4;

T8b949e// autofill destination hash and tab from query string
Tff7b72const Te6edf3destinationHash Tff7b72= Tff7b72thisTb4b4b4.Te6edf3$routeTb4b4b4.Te6edf3queryTb4b4b4.Te6edf3destination_hashTb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3destinationHashTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3destinationHash Tff7b72= Te6edf3destinationHashTb4b4b4;
Tb4b4b4}
Tff7b72const Te6edf3tab Tff7b72= Tff7b72thisTb4b4b4.Te6edf3$routeTb4b4b4.Te6edf3queryTb4b4b4.Te6edf3tabTb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3tabTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3activeTab Tff7b72= Te6edf3tabTb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Te6edf3beforeUnmountTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3GlobalEmitterTb4b4b4.Te6edf3offTb4b4b4(Ta5d6ff"telephone-history-updated"Tb4b4b4, Tff7b72thisTb4b4b4.Te6edf3getHistoryTb4b4b4)Tb4b4b4;
Te6edf3GlobalEmitterTb4b4b4.Te6edf3offTb4b4b4(Ta5d6ff"telephone-history-updated"Tb4b4b4, Tff7b72thisTb4b4b4.Te6edf3getVoicemailsTb4b4b4)Tb4b4b4;

Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3statusIntervalTb4b4b4) Te6edf3clearIntervalTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3statusIntervalTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3historyIntervalTb4b4b4) Te6edf3clearIntervalTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3historyIntervalTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3elapsedTimeIntervalTb4b4b4) Te6edf3clearIntervalTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3elapsedTimeIntervalTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3endedTimeoutTb4b4b4) Te6edf3clearTimeoutTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3endedTimeoutTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3audioPlayerTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3audioPlayerTb4b4b4.Te6edf3pauseTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3audioPlayer Tff7b72= Tff7b72nullTb4b4b4;
Tb4b4b4}
Tff7b72thisTb4b4b4.Te6edf3stopWebAudioTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3methodsTff7b72: Tb4b4b4{
Te6edf3formatDestinationHashTb4b4b4(Te6edf3hashTb4b4b4) Tb4b4b4{
Tff7b72return Te6edf3UtilsTb4b4b4.Te6edf3formatDestinationHashTb4b4b4(Te6edf3hashTb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3formatBytesTb4b4b4(Te6edf3bytesTb4b4b4) Tb4b4b4{
Tff7b72return Te6edf3UtilsTb4b4b4.Te6edf3formatBytesTb4b4b4(Te6edf3bytes Tff7b72|| T79c0ff0Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3formatDateTimeTb4b4b4(Te6edf3timestampTb4b4b4) Tb4b4b4{
Tff7b72return Te6edf3UtilsTb4b4b4.Te6edf3convertUnixMillisToLocalDateTimeStringTb4b4b4(Te6edf3timestampTb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3formatTimeAgoTb4b4b4(Te6edf3datetimeStringTb4b4b4) Tb4b4b4{
Tff7b72return Te6edf3UtilsTb4b4b4.Te6edf3formatTimeAgoTb4b4b4(Te6edf3datetimeStringTb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3formatDurationTb4b4b4(Te6edf3secondsTb4b4b4) Tb4b4b4{
Tff7b72return Te6edf3UtilsTb4b4b4.Te6edf3formatMinutesSecondsTb4b4b4(Te6edf3secondsTb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3ensureWebAudioTb4b4b4(Te6edf3webAudioStatusTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Tff7b72thisTb4b4b4.Te6edf3configTff7b72?Tb4b4b4.Te6edf3telephone_web_audio_enabledTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3stopWebAudioTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72returnTb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3activeCall Tff7b72&& Te6edf3webAudioStatusTff7b72?Tb4b4b4.Te6edf3enabledTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3audioFrameMs Tff7b72= Te6edf3webAudioStatusTb4b4b4.Te6edf3frame_ms Tff7b72|| T79c0ff60Tb4b4b4;
Tff7b72await Tff7b72thisTb4b4b4.Te6edf3startWebAudioTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72else Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3stopWebAudioTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3onToggleWebAudioTb4b4b4(Te6edf3newValTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Tff7b72thisTb4b4b4.Te6edf3configTb4b4b4) Tff7b72returnTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3configTb4b4b4.Te6edf3telephone_web_audio_enabled Tff7b72= Te6edf3newValTb4b4b4;
Tff7b72try Tb4b4b4{
Tff7b72await Tff7b72thisTb4b4b4.Te6edf3updateConfigTb4b4b4(Tb4b4b4{ Te6edf3telephone_web_audio_enabledTff7b72: Te6edf3newVal Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3newValTb4b4b4) Tb4b4b4{
Tff7b72await Tff7b72thisTb4b4b4.Te6edf3requestAudioPermissionTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72await Tff7b72thisTb4b4b4.Te6edf3startWebAudioTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72else Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3stopWebAudioTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4} Tff7b72catch Tb4b4b4{
T8b949e// revert on failure
Tff7b72thisTb4b4b4.Te6edf3configTb4b4b4.Te6edf3telephone_web_audio_enabled Tff7b72= Tff7b72!Te6edf3newValTb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3startWebAudioTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3audioWsTb4b4b4) Tb4b4b4{
Tff7b72returnTb4b4b4;
Tb4b4b4}
Tff7b72try Tb4b4b4{
Tff7b72const Te6edf3constraints Tff7b72= Tff7b72thisTb4b4b4.Te6edf3selectedAudioInputId
Tff7b72? Tb4b4b4{ Te6edf3audioTff7b72: Tb4b4b4{ Te6edf3deviceIdTff7b72: Tb4b4b4{ Te6edf3exactTff7b72: Tff7b72thisTb4b4b4.Te6edf3selectedAudioInputId Tb4b4b4} Tb4b4b4} Tb4b4b4}
Tff7b72: Tb4b4b4{ Te6edf3audioTff7b72: Tff7b72true Tb4b4b4}Tb4b4b4;
Tff7b72const Te6edf3stream Tff7b72= Tff7b72await Te6edf3navigatorTb4b4b4.Te6edf3mediaDevicesTb4b4b4.Te6edf3getUserMediaTb4b4b4(Te6edf3constraintsTb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3audioStream Tff7b72= Te6edf3streamTb4b4b4;

Tff7b72if Tb4b4b4(Tff7b72!Tff7b72thisTb4b4b4.Te6edf3audioCtxTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3audioCtx Tff7b72= Tff7b72new Te6edf3AudioContextTb4b4b4(Tb4b4b4{ Te6edf3sampleRateTff7b72: T79c0ff48000 Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}

Tff7b72const Te6edf3source Tff7b72= Tff7b72thisTb4b4b4.Te6edf3audioCtxTb4b4b4.Te6edf3createMediaStreamSourceTb4b4b4(Te6edf3streamTb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3wsProtocol Tff7b72= Tffa657windowTb4b4b4.Te6edf3locationTb4b4b4.Te6edf3protocol Tff7b72=== Ta5d6ff"https:" Tff7b72? Ta5d6ff"wss:" Tff7b72: Ta5d6ff"ws:"Tb4b4b4;
Tff7b72const Te6edf3url Tff7b72= Ta5d6ff`Tffd700${Te6edf3wsProtocolTffd700}Ta5d6ff//Tffd700${Tffa657windowTb4b4b4.Te6edf3locationTb4b4b4.Te6edf3hostTffd700}Ta5d6ff/ws/telephone/audioTa5d6ff`Tb4b4b4;

Tff7b72const Te6edf3workletLoaded Tff7b72= Tff7b72falseTb4b4b4; T8b949e// disabled to avoid CSP violations from blob worklets
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3workletLoadedTb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3processor Tff7b72= Tff7b72thisTb4b4b4.Te6edf3audioCtxTb4b4b4.Te6edf3createScriptProcessorTb4b4b4(T79c0ff1024Tb4b4b4, T79c0ff1Tb4b4b4, T79c0ff1Tb4b4b4)Tb4b4b4;
Te6edf3processorTb4b4b4.Te6edf3onaudioprocess Tff7b72= Tb4b4b4(Te6edf3eventTb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Tff7b72thisTb4b4b4.Te6edf3audioWs Tff7b72|| Tff7b72thisTb4b4b4.Te6edf3audioWsTb4b4b4.Te6edf3readyState Tff7b72!== Te6edf3WebSocketTb4b4b4.Te6edf3OPENTb4b4b4) Tff7b72returnTb4b4b4;
Tff7b72const Te6edf3input Tff7b72= Te6edf3eventTb4b4b4.Te6edf3inputBufferTb4b4b4.Te6edf3getChannelDataTb4b4b4(T79c0ff0Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3pcm Tff7b72= Tff7b72new Tffa657Int16ArrayTb4b4b4(Te6edf3inputTb4b4b4.Te6edf3lengthTb4b4b4)Tb4b4b4;
Tff7b72for Tb4b4b4(Tff7b72let Te6edf3i Tff7b72= T79c0ff0Tb4b4b4; Te6edf3i Tff7b72< Te6edf3inputTb4b4b4.Te6edf3lengthTb4b4b4; Te6edf3i Tff7b72+= T79c0ff1Tb4b4b4) Tb4b4b4{
Te6edf3pcmTb4b4b4[Te6edf3iTb4b4b4] Tff7b72= Tffa657MathTb4b4b4.Te6edf3maxTb4b4b4(Tff7b72-T79c0ff1Tb4b4b4, Tffa657MathTb4b4b4.Te6edf3minTb4b4b4(T79c0ff1Tb4b4b4, Te6edf3inputTb4b4b4[Te6edf3iTb4b4b4]Tb4b4b4)Tb4b4b4) Tff7b72* T79c0ff0x7fffTb4b4b4;
Tb4b4b4}
Tff7b72thisTb4b4b4.Te6edf3audioWsTb4b4b4.Te6edf3sendTb4b4b4(Te6edf3pcmTb4b4b4.Te6edf3bufferTb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4;
Te6edf3sourceTb4b4b4.Te6edf3connectTb4b4b4(Te6edf3processorTb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3audioProcessor Tff7b72= Te6edf3processorTb4b4b4;
Tb4b4b4}

Tff7b72const Te6edf3ws Tff7b72= Tff7b72new Te6edf3WebSocketTb4b4b4(Te6edf3urlTb4b4b4)Tb4b4b4;
Te6edf3wsTb4b4b4.Te6edf3binaryType Tff7b72= Ta5d6ff"arraybuffer"Tb4b4b4;
Te6edf3wsTb4b4b4.Te6edf3onopen Tff7b72= Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Te6edf3wsTb4b4b4.Te6edf3sendTb4b4b4(Tffa657JSONTb4b4b4.Te6edf3stringifyTb4b4b4(Tb4b4b4{ Te6edf3typeTff7b72: Ta5d6ff"attach" Tb4b4b4}Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4;
Te6edf3wsTb4b4b4.Te6edf3onmessage Tff7b72= Tb4b4b4(Te6edf3eventTb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72typeof Te6edf3eventTb4b4b4.Te6edf3data Tff7b72=== Ta5d6ff"string"Tb4b4b4) Tb4b4b4{
Tff7b72returnTb4b4b4;
Tb4b4b4}
Tff7b72thisTb4b4b4.Te6edf3playRemotePcmTb4b4b4(Te6edf3eventTb4b4b4.Te6edf3dataTb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4;
Te6edf3wsTb4b4b4.Te6edf3onerror Tff7b72= Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3stopWebAudioTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4;
Te6edf3wsTb4b4b4.Te6edf3onclose Tff7b72= Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3stopWebAudioTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3audioWs Tff7b72= Te6edf3wsTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3refreshAudioDevicesTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3errTb4b4b4) Tb4b4b4{
Te6edf3consoleTb4b4b4.Te6edf3errorTb4b4b4(Ta5d6ff"Web audio failed"Tb4b4b4, Te6edf3errTb4b4b4)Tb4b4b4;
Te6edf3ToastUtilsTb4b4b4.Te6edf3errorTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"call.web_audio_not_available"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3stopWebAudioTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3requestAudioPermissionTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72const Te6edf3stream Tff7b72= Tff7b72await Te6edf3navigatorTb4b4b4.Te6edf3mediaDevicesTb4b4b4.Te6edf3getUserMediaTb4b4b4(Tb4b4b4{ Te6edf3audioTff7b72: Tff7b72true Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3streamTb4b4b4.Te6edf3getTracksTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3forEachTb4b4b4(Tb4b4b4(Te6edf3tTb4b4b4) Tb4b4b4=> Te6edf3tTb4b4b4.Te6edf3stopTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72await Tff7b72thisTb4b4b4.Te6edf3refreshAudioDevicesTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Te6edf3consoleTb4b4b4.Te6edf3errorTb4b4b4(Ta5d6ff"Permission or device request failed"Tb4b4b4, Te6edf3eTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3refreshAudioDevicesTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72const Te6edf3devices Tff7b72= Tff7b72await Te6edf3navigatorTb4b4b4.Te6edf3mediaDevicesTb4b4b4.Te6edf3enumerateDevicesTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3audioInputDevices Tff7b72= Te6edf3devicesTb4b4b4.Te6edf3filterTb4b4b4(Tb4b4b4(Te6edf3dTb4b4b4) Tb4b4b4=> Te6edf3dTb4b4b4.Te6edf3kind Tff7b72=== Ta5d6ff"audioinput"Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3audioOutputDevices Tff7b72= Te6edf3devicesTb4b4b4.Te6edf3filterTb4b4b4(Tb4b4b4(Te6edf3dTb4b4b4) Tb4b4b4=> Te6edf3dTb4b4b4.Te6edf3kind Tff7b72=== Ta5d6ff"audiooutput"Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Tff7b72thisTb4b4b4.Te6edf3selectedAudioInputId Tff7b72&& Tff7b72thisTb4b4b4.Te6edf3audioInputDevicesTb4b4b4.Te6edf3lengthTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3selectedAudioInputId Tff7b72= Tff7b72thisTb4b4b4.Te6edf3audioInputDevicesTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4.Te6edf3deviceIdTb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Tff7b72!Tff7b72thisTb4b4b4.Te6edf3selectedAudioOutputId Tff7b72&& Tff7b72thisTb4b4b4.Te6edf3audioOutputDevicesTb4b4b4.Te6edf3lengthTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3selectedAudioOutputId Tff7b72= Tff7b72thisTb4b4b4.Te6edf3audioOutputDevicesTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4.Te6edf3deviceIdTb4b4b4;
Tb4b4b4}
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Te6edf3consoleTb4b4b4.Te6edf3errorTb4b4b4(Ta5d6ff"Failed to enumerate audio devices"Tb4b4b4, Te6edf3eTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Te6edf3playRemotePcmTb4b4b4(Te6edf3arrayBufferTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Tff7b72thisTb4b4b4.Te6edf3audioCtxTb4b4b4) Tb4b4b4{
Tff7b72returnTb4b4b4;
Tb4b4b4}
Tff7b72const Te6edf3pcm Tff7b72= Tff7b72new Tffa657Int16ArrayTb4b4b4(Te6edf3arrayBufferTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3pcmTb4b4b4.Te6edf3length Tff7b72=== T79c0ff0Tb4b4b4) Tff7b72returnTb4b4b4;
Tff7b72const Te6edf3floatBuf Tff7b72= Tff7b72new Tffa657Float32ArrayTb4b4b4(Te6edf3pcmTb4b4b4.Te6edf3lengthTb4b4b4)Tb4b4b4;
Tff7b72for Tb4b4b4(Tff7b72let Te6edf3i Tff7b72= T79c0ff0Tb4b4b4; Te6edf3i Tff7b72< Te6edf3pcmTb4b4b4.Te6edf3lengthTb4b4b4; Te6edf3i Tff7b72+= T79c0ff1Tb4b4b4) Tb4b4b4{
Te6edf3floatBufTb4b4b4[Te6edf3iTb4b4b4] Tff7b72= Te6edf3pcmTb4b4b4[Te6edf3iTb4b4b4] Tff7b72/ T79c0ff0x7fffTb4b4b4;
Tb4b4b4}
Tff7b72const Te6edf3audioBuffer Tff7b72= Tff7b72thisTb4b4b4.Te6edf3audioCtxTb4b4b4.Te6edf3createBufferTb4b4b4(T79c0ff1Tb4b4b4, Te6edf3floatBufTb4b4b4.Te6edf3lengthTb4b4b4, T79c0ff48000Tb4b4b4)Tb4b4b4;
Te6edf3audioBufferTb4b4b4.Te6edf3copyToChannelTb4b4b4(Te6edf3floatBufTb4b4b4, T79c0ff0Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3bufferSource Tff7b72= Tff7b72thisTb4b4b4.Te6edf3audioCtxTb4b4b4.Te6edf3createBufferSourceTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3bufferSourceTb4b4b4.Te6edf3buffer Tff7b72= Te6edf3audioBufferTb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3selectedAudioOutputId Tff7b72&& Ta5d6ff"setSinkId" Tff7b72in Te6edf3HTMLMediaElementTb4b4b4.Te6edf3prototypeTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Tff7b72thisTb4b4b4.Te6edf3remoteAudioElTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3remoteAudioEl Tff7b72= Tff7b72new Te6edf3AudioTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3remoteAudioElTb4b4b4.Te6edf3autoplay Tff7b72= Tff7b72trueTb4b4b4;
Tb4b4b4}
Tff7b72const Te6edf3dest Tff7b72= Tff7b72thisTb4b4b4.Te6edf3audioCtxTb4b4b4.Te6edf3createMediaStreamDestinationTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3bufferSourceTb4b4b4.Te6edf3connectTb4b4b4(Te6edf3destTb4b4b4)Tb4b4b4;
Te6edf3bufferSourceTb4b4b4.Te6edf3startTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3remoteAudioElTb4b4b4.Te6edf3srcObject Tff7b72= Te6edf3destTb4b4b4.Te6edf3streamTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3remoteAudioEl
Tb4b4b4.Te6edf3setSinkIdTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3selectedAudioOutputIdTb4b4b4)
Tb4b4b4.Tff7b72catchTb4b4b4(Tb4b4b4(Te6edf3errTb4b4b4) Tb4b4b4=> Te6edf3consoleTb4b4b4.Te6edf3warnTb4b4b4(Ta5d6ff"setSinkId failed"Tb4b4b4, Te6edf3errTb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72else Tb4b4b4{
Te6edf3bufferSourceTb4b4b4.Te6edf3connectTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3audioCtxTb4b4b4.Te6edf3destinationTb4b4b4)Tb4b4b4;
Te6edf3bufferSourceTb4b4b4.Te6edf3startTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Te6edf3stopWebAudioTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3audioProcessorTb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3audioProcessorTb4b4b4.Te6edf3disconnectTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4{
T8b949e// ignore
Tb4b4b4}
Tff7b72thisTb4b4b4.Te6edf3audioProcessor Tff7b72= Tff7b72nullTb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3audioStreamTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3audioStreamTb4b4b4.Te6edf3getTracksTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3forEachTb4b4b4(Tb4b4b4(Te6edf3tTb4b4b4) Tb4b4b4=> Te6edf3tTb4b4b4.Te6edf3stopTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3audioStream Tff7b72= Tff7b72nullTb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3audioWsTb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3audioWsTb4b4b4.Te6edf3closeTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4{
T8b949e// ignore
Tb4b4b4}
Tff7b72thisTb4b4b4.Te6edf3audioWs Tff7b72= Tff7b72nullTb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3remoteAudioElTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3remoteAudioElTb4b4b4.Te6edf3srcObject Tff7b72= Tff7b72nullTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3remoteAudioEl Tff7b72= Tff7b72nullTb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3audioWorkletNodeTb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3audioWorkletNodeTb4b4b4.Te6edf3disconnectTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4{
T8b949e// ignore
Tb4b4b4}
Tff7b72thisTb4b4b4.Te6edf3audioWorkletNode Tff7b72= Tff7b72nullTb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3audioSilentGainTb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3audioSilentGainTb4b4b4.Te6edf3disconnectTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4{
T8b949e// ignore
Tb4b4b4}
Tff7b72thisTb4b4b4.Te6edf3audioSilentGain Tff7b72= Tff7b72nullTb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3getConfigTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72const Te6edf3response Tff7b72= Tff7b72await Tffa657windowTb4b4b4.Te6edf3axiosTb4b4b4.Te6edf3getTb4b4b4(Ta5d6ff"/api/v1/config"Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3config Tff7b72= Te6edf3responseTb4b4b4.Te6edf3dataTb4b4b4.Te6edf3configTb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Te6edf3consoleTb4b4b4.Te6edf3logTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3updateConfigTb4b4b4(Te6edf3configTb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72const Te6edf3response Tff7b72= Tff7b72await Tffa657windowTb4b4b4.Te6edf3axiosTb4b4b4.Te6edf3patchTb4b4b4(Ta5d6ff"/api/v1/config"Tb4b4b4, Te6edf3configTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3responseTb4b4b4.Te6edf3dataTff7b72?Tb4b4b4.Te6edf3configTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3config Tff7b72= Te6edf3responseTb4b4b4.Te6edf3dataTb4b4b4.Te6edf3configTb4b4b4;
Tb4b4b4}
Te6edf3ToastUtilsTb4b4b4.Te6edf3successTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"call.settings_saved"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4{
Te6edf3ToastUtilsTb4b4b4.Te6edf3errorTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"call.failed_to_save_settings"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3getAudioProfilesTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72const Te6edf3response Tff7b72= Tff7b72await Tffa657windowTb4b4b4.Te6edf3axiosTb4b4b4.Te6edf3getTb4b4b4(Ta5d6ff"/api/v1/telephone/audio-profiles"Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3audioProfiles Tff7b72= Te6edf3responseTb4b4b4.Te6edf3dataTb4b4b4.Te6edf3audio_profilesTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3selectedAudioProfileId Tff7b72= Te6edf3responseTb4b4b4.Te6edf3dataTb4b4b4.Te6edf3default_audio_profile_idTb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Te6edf3consoleTb4b4b4.Te6edf3logTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3getStatusTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72const Te6edf3response Tff7b72= Tff7b72await Tffa657windowTb4b4b4.Te6edf3axiosTb4b4b4.Te6edf3getTb4b4b4(Ta5d6ff"/api/v1/telephone/status"Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3oldCall Tff7b72= Tff7b72thisTb4b4b4.Te6edf3activeCallTb4b4b4;
Tff7b72const Te6edf3newCall Tff7b72= Te6edf3responseTb4b4b4.Te6edf3dataTb4b4b4.Te6edf3active_callTb4b4b4;

T8b949e// Sync local mute state from backend
Tff7b72if Tb4b4b4(Te6edf3newCallTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3oldCall Tff7b72|| Te6edf3newCallTb4b4b4.Te6edf3hash Tff7b72!== Te6edf3oldCallTb4b4b4.Te6edf3hashTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3localMicMuted Tff7b72= Te6edf3newCallTb4b4b4.Te6edf3is_mic_mutedTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3localSpeakerMuted Tff7b72= Te6edf3newCallTb4b4b4.Te6edf3is_speaker_mutedTb4b4b4;
Tb4b4b4}
Tb4b4b4}

Tff7b72thisTb4b4b4.Te6edf3activeCall Tff7b72= Te6edf3newCallTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3initiationStatus Tff7b72= Te6edf3responseTb4b4b4.Te6edf3dataTb4b4b4.Te6edf3initiation_statusTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3initiationTargetHash Tff7b72= Te6edf3responseTb4b4b4.Te6edf3dataTb4b4b4.Te6edf3initiation_target_hashTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3initiationTargetName Tff7b72= Te6edf3responseTb4b4b4.Te6edf3dataTb4b4b4.Te6edf3initiation_target_nameTb4b4b4;

Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3activeCallTff7b72?Tb4b4b4.Te6edf3is_voicemailTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3wasVoicemail Tff7b72= Tff7b72trueTb4b4b4;
Tb4b4b4}

Tff7b72if Tb4b4b4(Te6edf3responseTb4b4b4.Te6edf3dataTb4b4b4.Te6edf3voicemailTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3unreadVoicemailsCount Tff7b72= Te6edf3responseTb4b4b4.Te6edf3dataTb4b4b4.Te6edf3voicemailTb4b4b4.Te6edf3unread_countTb4b4b4;
Tb4b4b4}

Tff7b72if Tb4b4b4(Te6edf3responseTb4b4b4.Te6edf3dataTb4b4b4.Te6edf3web_audioTb4b4b4) Tb4b4b4{
Tff7b72await Tff7b72thisTb4b4b4.Te6edf3ensureWebAudioTb4b4b4(Te6edf3responseTb4b4b4.Te6edf3dataTb4b4b4.Te6edf3web_audioTb4b4b4)Tb4b4b4;
Tb4b4b4}

Tff7b72thisTb4b4b4.Te6edf3hydrateContactVisualsTb4b4b4(Tb4b4b4)Tb4b4b4;

T8b949e// If call just ended, refresh history and show ended state
Tff7b72if Tb4b4b4(Te6edf3oldCall Tff7b72!= Tff7b72null Tff7b72&& Tff7b72thisTb4b4b4.Te6edf3activeCall Tff7b72== Tff7b72nullTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3getHistoryTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3getVoicemailsTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3lastCall Tff7b72= Te6edf3oldCallTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3isCallEnded Tff7b72= Tff7b72trueTb4b4b4;

Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3endedTimeoutTb4b4b4) Te6edf3clearTimeoutTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3endedTimeoutTb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3endedTimeout Tff7b72= Te6edf3setTimeoutTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3isCallEnded Tff7b72= Tff7b72falseTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3lastCall Tff7b72= Tff7b72nullTb4b4b4;

T8b949e// Close window if we are in a popout
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$routeTb4b4b4.Te6edf3metaTb4b4b4.Te6edf3isPopoutTb4b4b4) Tb4b4b4{
Tffa657windowTb4b4b4.Te6edf3closeTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4, T79c0ff5000Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72else Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3activeCall Tff7b72!= Tff7b72nullTb4b4b4) Tb4b4b4{
T8b949e// if a new call starts, clear ended state
Tff7b72thisTb4b4b4.Te6edf3isCallEnded Tff7b72= Tff7b72falseTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3wasDeclined Tff7b72= Tff7b72falseTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3wasVoicemail Tff7b72= Tff7b72falseTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3lastCall Tff7b72= Tff7b72nullTb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3endedTimeoutTb4b4b4) Te6edf3clearTimeoutTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3endedTimeoutTb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72else Tff7b72if Tb4b4b4(Tff7b72!Tff7b72thisTb4b4b4.Te6edf3endedTimeoutTb4b4b4) Tb4b4b4{
T8b949e// If no call and no ended state timeout active, ensure everything is reset
Tff7b72thisTb4b4b4.Te6edf3isCallEnded Tff7b72= Tff7b72falseTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3wasDeclined Tff7b72= Tff7b72falseTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3wasVoicemail Tff7b72= Tff7b72falseTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3lastCall Tff7b72= Tff7b72nullTb4b4b4;
Tb4b4b4}
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Te6edf3consoleTb4b4b4.Te6edf3logTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3addContactFromHistoryTb4b4b4(Te6edf3entryTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3editingContact Tff7b72= Tff7b72nullTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3contactForm Tff7b72= Tb4b4b4{
Te6edf3nameTff7b72: Te6edf3entryTb4b4b4.Te6edf3remote_identity_name Tff7b72|| Ta5d6ff""Tb4b4b4,
Te6edf3remote_identity_hashTff7b72:
Te6edf3entryTb4b4b4.Te6edf3remote_telephony_hash Tff7b72|| Te6edf3entryTb4b4b4.Te6edf3remote_destination_hash Tff7b72|| Te6edf3entryTb4b4b4.Te6edf3remote_identity_hashTb4b4b4,
Te6edf3preferred_ringtone_idTff7b72: Tff7b72nullTb4b4b4,
Tb4b4b4}Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3isContactModalOpen Tff7b72= Tff7b72trueTb4b4b4;
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3getHistoryTb4b4b4(Te6edf3loadMore Tff7b72= Tff7b72falseTb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3loadMoreTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3callHistoryOffset Tff7b72= T79c0ff0Tb4b4b4;
Tb4b4b4}

Tff7b72const Te6edf3response Tff7b72= Tff7b72await Tffa657windowTb4b4b4.Te6edf3axiosTb4b4b4.Te6edf3getTb4b4b4(
Ta5d6ff`Ta5d6ff/api/v1/telephone/history?limit=Tffd700${Tff7b72thisTb4b4b4.Te6edf3callHistoryLimitTffd700}Ta5d6ff&offset=Tffd700${Tff7b72thisTb4b4b4.Te6edf3callHistoryOffsetTffd700}Tffd700${
Tff7b72thisTb4b4b4.Te6edf3callHistorySearch Tff7b72? Ta5d6ff`Ta5d6ff&search=Tffd700${Tffa657encodeURIComponentTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3callHistorySearchTb4b4b4)Tffd700}Ta5d6ff` Tff7b72: Ta5d6ff""
Tffd700}Ta5d6ff`
Tb4b4b4)Tb4b4b4;

Tff7b72const Te6edf3newItems Tff7b72= Te6edf3responseTb4b4b4.Te6edf3dataTb4b4b4.Te6edf3call_history Tff7b72|| Tb4b4b4[Tb4b4b4]Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3loadMoreTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3callHistory Tff7b72= Tb4b4b4[Tb4b4b4...Tff7b72thisTb4b4b4.Te6edf3callHistoryTb4b4b4, Tb4b4b4...Te6edf3newItemsTb4b4b4]Tb4b4b4;
Tb4b4b4} Tff7b72else Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3callHistory Tff7b72= Te6edf3newItemsTb4b4b4;
Tb4b4b4}

Tff7b72thisTb4b4b4.Te6edf3hasMoreCallHistory Tff7b72= Te6edf3newItemsTb4b4b4.Te6edf3length Tff7b72=== Tff7b72thisTb4b4b4.Te6edf3callHistoryLimitTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3hydrateContactVisualsTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Te6edf3consoleTb4b4b4.Te6edf3logTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3loadMoreCallHistoryTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3callHistoryOffset Tff7b72+= Tff7b72thisTb4b4b4.Te6edf3callHistoryLimitTb4b4b4;
Tff7b72await Tff7b72thisTb4b4b4.Te6edf3getHistoryTb4b4b4(Tff7b72trueTb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3onCallHistorySearchInputTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3searchDebounceTimeoutTb4b4b4) Te6edf3clearTimeoutTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3searchDebounceTimeoutTb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3searchDebounceTimeout Tff7b72= Te6edf3setTimeoutTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3getHistoryTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4, T79c0ff500Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3getDiscoveryTb4b4b4(Te6edf3loadMore Tff7b72= Tff7b72falseTb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3loadMoreTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3discoveryOffset Tff7b72= T79c0ff0Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3hasMoreDiscovery Tff7b72= Tff7b72trueTb4b4b4;
Tb4b4b4}

Tff7b72const Te6edf3response Tff7b72= Tff7b72await Tffa657windowTb4b4b4.Te6edf3axiosTb4b4b4.Te6edf3getTb4b4b4(Ta5d6ff"/api/v1/announces"Tb4b4b4, Tb4b4b4{
Te6edf3paramsTff7b72: Tb4b4b4{
Te6edf3aspectTff7b72: Ta5d6ff"lxst.telephony"Tb4b4b4,
Te6edf3limitTff7b72: Tff7b72thisTb4b4b4.Te6edf3discoveryLimitTb4b4b4,
Te6edf3offsetTff7b72: Tff7b72thisTb4b4b4.Te6edf3discoveryOffsetTb4b4b4,
Te6edf3searchTff7b72: Tff7b72thisTb4b4b4.Te6edf3discoverySearchTb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;

Tff7b72const Te6edf3newItems Tff7b72= Te6edf3responseTb4b4b4.Te6edf3dataTb4b4b4.Te6edf3announces Tff7b72|| Tb4b4b4[Tb4b4b4]Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3totalDiscoveryCount Tff7b72= Te6edf3responseTb4b4b4.Te6edf3dataTb4b4b4.Te6edf3total_count Tff7b72|| T79c0ff0Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3loadMoreTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3discoveryAnnounces Tff7b72= Tb4b4b4[Tb4b4b4...Tff7b72thisTb4b4b4.Te6edf3discoveryAnnouncesTb4b4b4, Tb4b4b4...Te6edf3newItemsTb4b4b4]Tb4b4b4;
Tb4b4b4} Tff7b72else Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3discoveryAnnounces Tff7b72= Te6edf3newItemsTb4b4b4;
Tb4b4b4}

Tff7b72thisTb4b4b4.Te6edf3hasMoreDiscovery Tff7b72= Te6edf3newItemsTb4b4b4.Te6edf3length Tff7b72=== Tff7b72thisTb4b4b4.Te6edf3discoveryLimitTb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Te6edf3consoleTb4b4b4.Te6edf3logTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3loadMoreDiscoveryTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3discoveryOffset Tff7b72+= Tff7b72thisTb4b4b4.Te6edf3discoveryLimitTb4b4b4;
Tff7b72await Tff7b72thisTb4b4b4.Te6edf3getDiscoveryTb4b4b4(Tff7b72trueTb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3onDiscoverySearchInputTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3searchDebounceTimeoutTb4b4b4) Te6edf3clearTimeoutTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3searchDebounceTimeoutTb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3searchDebounceTimeout Tff7b72= Te6edf3setTimeoutTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3getDiscoveryTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4, T79c0ff500Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3toggleDoNotDisturbTb4b4b4(Te6edf3valueTb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72await Tffa657windowTb4b4b4.Te6edf3axiosTb4b4b4.Te6edf3patchTb4b4b4(Ta5d6ff"/api/v1/config"Tb4b4b4, Tb4b4b4{
Te6edf3do_not_disturb_enabledTff7b72: Te6edf3valueTb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3configTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3configTb4b4b4.Te6edf3do_not_disturb_enabled Tff7b72= Te6edf3valueTb4b4b4;
Tb4b4b4}
Te6edf3ToastUtilsTb4b4b4.Te6edf3successTb4b4b4(Te6edf3value Tff7b72? Ta5d6ff"Do Not Disturb enabled" Tff7b72: Ta5d6ff"Do Not Disturb disabled"Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4{
Te6edf3ToastUtilsTb4b4b4.Te6edf3errorTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"call.failed_to_update_dnd"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3toggleAllowCallsFromContactsOnlyTb4b4b4(Te6edf3valueTb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72await Tffa657windowTb4b4b4.Te6edf3axiosTb4b4b4.Te6edf3patchTb4b4b4(Ta5d6ff"/api/v1/config"Tb4b4b4, Tb4b4b4{
Te6edf3telephone_allow_calls_from_contacts_onlyTff7b72: Te6edf3valueTb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3configTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3configTb4b4b4.Te6edf3telephone_allow_calls_from_contacts_only Tff7b72= Te6edf3valueTb4b4b4;
Tb4b4b4}
Te6edf3ToastUtilsTb4b4b4.Te6edf3successTb4b4b4(Te6edf3value Tff7b72? Ta5d6ff"Calls limited to contacts" Tff7b72: Ta5d6ff"Calls allowed from everyone"Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4{
Te6edf3ToastUtilsTb4b4b4.Te6edf3errorTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"call.failed_to_update_call_settings"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3toggleCallRecordingTb4b4b4(Te6edf3valueTb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72await Tffa657windowTb4b4b4.Te6edf3axiosTb4b4b4.Te6edf3patchTb4b4b4(Ta5d6ff"/api/v1/config"Tb4b4b4, Tb4b4b4{
Te6edf3call_recording_enabledTff7b72: Te6edf3valueTb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3configTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3configTb4b4b4.Te6edf3call_recording_enabled Tff7b72= Te6edf3valueTb4b4b4;
Tb4b4b4}
Te6edf3ToastUtilsTb4b4b4.Te6edf3successTb4b4b4(Te6edf3value Tff7b72? Ta5d6ff"Call recording enabled" Tff7b72: Ta5d6ff"Call recording disabled"Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4{
Te6edf3ToastUtilsTb4b4b4.Te6edf3errorTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"call.failed_to_update_recording_status"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3clearHistoryTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3confirmTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"common.delete_confirm"Tb4b4b4)Tb4b4b4)Tb4b4b4) Tff7b72returnTb4b4b4;
Tff7b72try Tb4b4b4{
Tff7b72await Tffa657windowTb4b4b4.Te6edf3axiosTb4b4b4.Tff7b72deleteTb4b4b4(Ta5d6ff"/api/v1/telephone/history"Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3callHistory Tff7b72= Tb4b4b4[Tb4b4b4]Tb4b4b4;
Te6edf3ToastUtilsTb4b4b4.Te6edf3successTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"call.call_history_cleared"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Te6edf3consoleTb4b4b4.Te6edf3errorTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4;
Te6edf3ToastUtilsTb4b4b4.Te6edf3errorTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"call.failed_to_clear_call_history"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3blockIdentityTb4b4b4(Te6edf3hashTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3confirmTb4b4b4(Ta5d6ff`Ta5d6ffAre you sure you want to banish this identity?Ta5d6ff`Tb4b4b4)Tb4b4b4) Tff7b72returnTb4b4b4;
Tff7b72try Tb4b4b4{
Tff7b72await Tffa657windowTb4b4b4.Te6edf3axiosTb4b4b4.Te6edf3postTb4b4b4(Ta5d6ff"/api/v1/blocked-destinations"Tb4b4b4, Tb4b4b4{
Te6edf3destination_hashTff7b72: Te6edf3hashTb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3ToastUtilsTb4b4b4.Te6edf3successTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"call.identity_banished"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3getHistoryTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4{
Te6edf3ToastUtilsTb4b4b4.Te6edf3errorTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"call.failed_to_banish_identity"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3getVoicemailStatusTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72const Te6edf3response Tff7b72= Tff7b72await Tffa657windowTb4b4b4.Te6edf3axiosTb4b4b4.Te6edf3getTb4b4b4(Ta5d6ff"/api/v1/telephone/voicemail/status"Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3voicemailStatus Tff7b72= Te6edf3responseTb4b4b4.Te6edf3dataTb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Te6edf3consoleTb4b4b4.Te6edf3logTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3getRingtoneStatusTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72const Te6edf3response Tff7b72= Tff7b72await Tffa657windowTb4b4b4.Te6edf3axiosTb4b4b4.Te6edf3getTb4b4b4(Ta5d6ff"/api/v1/telephone/ringtones/status"Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3ringtoneStatus Tff7b72= Te6edf3responseTb4b4b4.Te6edf3dataTb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Te6edf3consoleTb4b4b4.Te6edf3logTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3getRingtonesTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72const Te6edf3response Tff7b72= Tff7b72await Tffa657windowTb4b4b4.Te6edf3axiosTb4b4b4.Te6edf3getTb4b4b4(Ta5d6ff"/api/v1/telephone/ringtones"Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3ringtones Tff7b72= Te6edf3responseTb4b4b4.Te6edf3dataTb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Te6edf3consoleTb4b4b4.Te6edf3errorTb4b4b4(Ta5d6ff"Failed to get ringtones:"Tb4b4b4, Te6edf3eTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3deleteRingtoneTb4b4b4(Te6edf3ringtoneTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3confirmTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"common.delete_confirm"Tb4b4b4)Tb4b4b4)Tb4b4b4) Tff7b72returnTb4b4b4;
Tff7b72try Tb4b4b4{
Tff7b72await Tffa657windowTb4b4b4.Te6edf3axiosTb4b4b4.Tff7b72deleteTb4b4b4(Ta5d6ff`Ta5d6ff/api/v1/telephone/ringtones/Tffd700${Te6edf3ringtoneTb4b4b4.Te6edf3idTffd700}Ta5d6ff`Tb4b4b4)Tb4b4b4;
Te6edf3ToastUtilsTb4b4b4.Te6edf3successTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"call.ringtone_deleted"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72await Tff7b72thisTb4b4b4.Te6edf3getRingtonesTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72await Tff7b72thisTb4b4b4.Te6edf3getRingtoneStatusTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Te6edf3consoleTb4b4b4.Te6edf3errorTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4;
Te6edf3ToastUtilsTb4b4b4.Te6edf3errorTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"call.failed_to_delete_ringtone"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3setPrimaryRingtoneTb4b4b4(Te6edf3ringtoneTb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72await Tffa657windowTb4b4b4.Te6edf3axiosTb4b4b4.Te6edf3patchTb4b4b4(Ta5d6ff`Ta5d6ff/api/v1/telephone/ringtones/Tffd700${Te6edf3ringtoneTb4b4b4.Te6edf3idTffd700}Ta5d6ff`Tb4b4b4, Tb4b4b4{
Te6edf3is_primaryTff7b72: Tff7b72trueTb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3ToastUtilsTb4b4b4.Te6edf3successTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"call.primary_ringtone_set"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72await Tff7b72thisTb4b4b4.Te6edf3getRingtonesTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72await Tff7b72thisTb4b4b4.Te6edf3getRingtoneStatusTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Te6edf3consoleTb4b4b4.Te6edf3errorTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4;
Te6edf3ToastUtilsTb4b4b4.Te6edf3errorTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"call.failed_to_set_primary_ringtone"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Te6edf3startEditingRingtoneTb4b4b4(Te6edf3ringtoneTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3editingRingtoneId Tff7b72= Te6edf3ringtoneTb4b4b4.Te6edf3idTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3editingRingtoneName Tff7b72= Te6edf3ringtoneTb4b4b4.Te6edf3display_nameTb4b4b4;
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3saveRingtoneNameTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72await Tffa657windowTb4b4b4.Te6edf3axiosTb4b4b4.Te6edf3patchTb4b4b4(Ta5d6ff`Ta5d6ff/api/v1/telephone/ringtones/Tffd700${Tff7b72thisTb4b4b4.Te6edf3editingRingtoneIdTffd700}Ta5d6ff`Tb4b4b4, Tb4b4b4{
Te6edf3display_nameTff7b72: Tff7b72thisTb4b4b4.Te6edf3editingRingtoneNameTb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3editingRingtoneId Tff7b72= Tff7b72nullTb4b4b4;
Tff7b72await Tff7b72thisTb4b4b4.Te6edf3getRingtonesTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Te6edf3consoleTb4b4b4.Te6edf3errorTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4;
Te6edf3ToastUtilsTb4b4b4.Te6edf3errorTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"call.failed_to_update_ringtone_name"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3uploadRingtoneTb4b4b4(Te6edf3eventTb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3file Tff7b72= Te6edf3eventTb4b4b4.Te6edf3targetTb4b4b4.Te6edf3filesTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3fileTb4b4b4) Tff7b72returnTb4b4b4;

Tff7b72thisTb4b4b4.Te6edf3isUploadingRingtone Tff7b72= Tff7b72trueTb4b4b4;
Tff7b72const Te6edf3formData Tff7b72= Tff7b72new Te6edf3FormDataTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3formDataTb4b4b4.Te6edf3appendTb4b4b4(Ta5d6ff"file"Tb4b4b4, Te6edf3fileTb4b4b4)Tb4b4b4;

Tff7b72try Tb4b4b4{
Tff7b72await Tffa657windowTb4b4b4.Te6edf3axiosTb4b4b4.Te6edf3postTb4b4b4(Ta5d6ff"/api/v1/telephone/ringtones/upload"Tb4b4b4, Te6edf3formDataTb4b4b4, Tb4b4b4{
Te6edf3headersTff7b72: Tb4b4b4{
Ta5d6ff"Content-Type"Tff7b72: Ta5d6ff"multipart/form-data"Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3ToastUtilsTb4b4b4.Te6edf3successTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"call.ringtone_uploaded_successfully"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72await Tff7b72thisTb4b4b4.Te6edf3getRingtonesTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72await Tff7b72thisTb4b4b4.Te6edf3getRingtoneStatusTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Te6edf3consoleTb4b4b4.Te6edf3errorTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4;
Te6edf3ToastUtilsTb4b4b4.Te6edf3errorTb4b4b4(Te6edf3eTb4b4b4.Te6edf3responseTff7b72?Tb4b4b4.Te6edf3dataTff7b72?Tb4b4b4.Te6edf3message Tff7b72|| Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"call.failed_to_upload_ringtone"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72finally Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3isUploadingRingtone Tff7b72= Tff7b72falseTb4b4b4;
Te6edf3eventTb4b4b4.Te6edf3targetTb4b4b4.Te6edf3value Tff7b72= Ta5d6ff""Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3playRingtonePreviewTb4b4b4(Te6edf3ringtoneTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3isPlayingRingtone Tff7b72&& Tff7b72thisTb4b4b4.Te6edf3playingRingtoneId Tff7b72=== Te6edf3ringtoneTb4b4b4.Te6edf3idTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3audioPlayerTb4b4b4.Te6edf3pauseTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3isPlayingRingtone Tff7b72= Tff7b72falseTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3playingRingtoneId Tff7b72= Tff7b72nullTb4b4b4;
Tff7b72returnTb4b4b4;
Tb4b4b4}

Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3audioPlayerTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3audioPlayerTb4b4b4.Te6edf3pauseTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}

Tff7b72thisTb4b4b4.Te6edf3playingRingtoneId Tff7b72= Te6edf3ringtoneTb4b4b4.Te6edf3idTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3audioPlayer Tff7b72= Tff7b72new Te6edf3AudioTb4b4b4(Ta5d6ff`Ta5d6ff/api/v1/telephone/ringtones/Tffd700${Te6edf3ringtoneTb4b4b4.Te6edf3idTffd700}Ta5d6ff/audioTa5d6ff`Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3configTff7b72?Tb4b4b4.Te6edf3ringtone_volume Tff7b72!== Tff7b72undefinedTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3audioPlayerTb4b4b4.Te6edf3volume Tff7b72= Tff7b72thisTb4b4b4.Te6edf3configTb4b4b4.Te6edf3ringtone_volume Tff7b72/ T79c0ff100.0Tb4b4b4;
Tb4b4b4}
Tff7b72thisTb4b4b4.Te6edf3audioPlayerTb4b4b4.Te6edf3onended Tff7b72= Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3isPlayingRingtone Tff7b72= Tff7b72falseTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3playingRingtoneId Tff7b72= Tff7b72nullTb4b4b4;
Tb4b4b4}Tb4b4b4;

Tff7b72try Tb4b4b4{
Tff7b72await Tff7b72thisTb4b4b4.Te6edf3audioPlayerTb4b4b4.Te6edf3playTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3isPlayingRingtone Tff7b72= Tff7b72trueTb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Te6edf3consoleTb4b4b4.Te6edf3errorTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4;
Te6edf3ToastUtilsTb4b4b4.Te6edf3errorTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"call.failed_to_play_ringtone"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Te6edf3openRingtoneEditorTb4b4b4(Te6edf3ringtoneTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3editingRingtoneForAudio Tff7b72= Te6edf3ringtoneTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3isRingtoneEditorOpen Tff7b72= Tff7b72trueTb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3onRingtoneSavedTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3getRingtonesTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3getRingtoneStatusTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3getVoicemailsTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72const Te6edf3response Tff7b72= Tff7b72await Tffa657windowTb4b4b4.Te6edf3axiosTb4b4b4.Te6edf3getTb4b4b4(Ta5d6ff"/api/v1/telephone/voicemails"Tb4b4b4, Tb4b4b4{
Te6edf3paramsTff7b72: Tb4b4b4{ Te6edf3searchTff7b72: Tff7b72thisTb4b4b4.Te6edf3voicemailSearch Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3voicemails Tff7b72= Te6edf3responseTb4b4b4.Te6edf3dataTb4b4b4.Te6edf3voicemails Tff7b72|| Tb4b4b4[Tb4b4b4]Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3unreadVoicemailsCount Tff7b72= Te6edf3responseTb4b4b4.Te6edf3dataTb4b4b4.Te6edf3unread_count Tff7b72|| T79c0ff0Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Te6edf3consoleTb4b4b4.Te6edf3logTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Te6edf3onVoicemailSearchInputTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3searchDebounceTimeoutTb4b4b4) Te6edf3clearTimeoutTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3searchDebounceTimeoutTb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3searchDebounceTimeout Tff7b72= Te6edf3setTimeoutTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3getVoicemailsTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4, T79c0ff300Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3getContactByHashTb4b4b4(Te6edf3hashTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3hashTb4b4b4) Tff7b72return Tff7b72nullTb4b4b4;
Tff7b72return Tff7b72thisTb4b4b4.Te6edf3contactsTb4b4b4.Te6edf3findTb4b4b4(Tb4b4b4(Te6edf3cTb4b4b4) Tb4b4b4=> Te6edf3cTb4b4b4.Te6edf3remote_identity_hash Tff7b72=== Te6edf3hashTb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3getContactsTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72const Te6edf3response Tff7b72= Tff7b72await Tffa657windowTb4b4b4.Te6edf3axiosTb4b4b4.Te6edf3getTb4b4b4(Ta5d6ff"/api/v1/telephone/contacts"Tb4b4b4, Tb4b4b4{
Te6edf3paramsTff7b72: Tb4b4b4{ Te6edf3searchTff7b72: Tff7b72thisTb4b4b4.Te6edf3contactsSearch Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3contacts Tff7b72= Te6edf3responseTb4b4b4.Te6edf3dataTb4b4b4.Te6edf3contacts Tff7b72|| Tb4b4b4(Tffa657ArrayTb4b4b4.Te6edf3isArrayTb4b4b4(Te6edf3responseTb4b4b4.Te6edf3dataTb4b4b4) Tff7b72? Te6edf3responseTb4b4b4.Te6edf3data Tff7b72: Tb4b4b4[Tb4b4b4]Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3hydrateContactVisualsTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Te6edf3consoleTb4b4b4.Te6edf3logTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Te6edf3onContactsSearchInputTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3searchDebounceTimeoutTb4b4b4) Te6edf3clearTimeoutTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3searchDebounceTimeoutTb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3searchDebounceTimeout Tff7b72= Te6edf3setTimeoutTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3getContactsTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4, T79c0ff300Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3hydrateContactVisualsTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3map Tff7b72= Tb4b4b4{Tb4b4b4}Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3contactsTb4b4b4.Te6edf3forEachTb4b4b4(Tb4b4b4(Te6edf3cTb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3cTb4b4b4) Tff7b72returnTb4b4b4;
Tff7b72const Te6edf3image Tff7b72= Te6edf3cTb4b4b4.Te6edf3custom_imageTb4b4b4;
Tff7b72const Te6edf3keys Tff7b72= Tb4b4b4[Te6edf3cTb4b4b4.Te6edf3remote_identity_hashTb4b4b4, Te6edf3cTb4b4b4.Te6edf3lxmf_addressTb4b4b4, Te6edf3cTb4b4b4.Te6edf3lxst_addressTb4b4b4]Tb4b4b4.Te6edf3filterTb4b4b4(Tffa657BooleanTb4b4b4)Tb4b4b4;
Te6edf3keysTb4b4b4.Te6edf3forEachTb4b4b4(Tb4b4b4(Te6edf3kTb4b4b4) Tb4b4b4=> Tb4b4b4{
Te6edf3mapTb4b4b4[Te6edf3kTb4b4b4] Tff7b72= Te6edf3imageTb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;

Tff7b72const Te6edf3applyImage Tff7b72= Tb4b4b4(Te6edf3targetTb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3targetTb4b4b4) Tff7b72returnTb4b4b4;
Tff7b72const Te6edf3key Tff7b72=
Te6edf3targetTb4b4b4.Te6edf3remote_identity_hash Tff7b72|| Te6edf3targetTb4b4b4.Te6edf3remote_destination_hash Tff7b72|| Te6edf3targetTb4b4b4.Te6edf3remote_telephony_hashTb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3key Tff7b72&& Te6edf3mapTb4b4b4[Te6edf3keyTb4b4b4]Tb4b4b4) Tb4b4b4{
Te6edf3targetTb4b4b4.Te6edf3custom_image Tff7b72= Te6edf3mapTb4b4b4[Te6edf3keyTb4b4b4]Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4;

Te6edf3applyImageTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3activeCallTb4b4b4)Tb4b4b4;
Te6edf3applyImageTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3lastCallTb4b4b4)Tb4b4b4;

Tff7b72if Tb4b4b4(Tffa657ArrayTb4b4b4.Te6edf3isArrayTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3callHistoryTb4b4b4) Tff7b72&& Tff7b72thisTb4b4b4.Te6edf3callHistoryTb4b4b4.Te6edf3length Tff7b72> T79c0ff0Tb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3callHistory Tff7b72= Tff7b72thisTb4b4b4.Te6edf3callHistoryTb4b4b4.Te6edf3mapTb4b4b4(Tb4b4b4(Te6edf3entryTb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3key Tff7b72=
Te6edf3entryTb4b4b4.Te6edf3remote_identity_hash Tff7b72|| Te6edf3entryTb4b4b4.Te6edf3remote_destination_hash Tff7b72|| Te6edf3entryTb4b4b4.Te6edf3remote_telephony_hashTb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3key Tff7b72&& Te6edf3mapTb4b4b4[Te6edf3keyTb4b4b4]Tb4b4b4) Tb4b4b4{
Tff7b72return Tb4b4b4{ Tb4b4b4...Te6edf3entryTb4b4b4, Te6edf3contact_imageTff7b72: Te6edf3mapTb4b4b4[Te6edf3keyTb4b4b4] Tb4b4b4}Tb4b4b4;
Tb4b4b4}
Tff7b72return Te6edf3entryTb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Te6edf3openAddContactModalTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3editingContact Tff7b72= Tff7b72nullTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3contactForm Tff7b72= Tb4b4b4{
Te6edf3nameTff7b72: Ta5d6ff""Tb4b4b4,
Te6edf3remote_identity_hashTff7b72: Ta5d6ff""Tb4b4b4,
Te6edf3lxmf_addressTff7b72: Ta5d6ff""Tb4b4b4,
Te6edf3lxst_addressTff7b72: Ta5d6ff""Tb4b4b4,
Te6edf3preferred_ringtone_idTff7b72: Tff7b72nullTb4b4b4,
Te6edf3custom_imageTff7b72: Tff7b72nullTb4b4b4,
Tb4b4b4}Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3isContactModalOpen Tff7b72= Tff7b72trueTb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3openEditContactModalTb4b4b4(Te6edf3contactTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3editingContact Tff7b72= Te6edf3contactTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3contactForm Tff7b72= Tb4b4b4{
Te6edf3idTff7b72: Te6edf3contactTb4b4b4.Te6edf3idTb4b4b4,
Te6edf3nameTff7b72: Te6edf3contactTb4b4b4.Te6edf3nameTb4b4b4,
Te6edf3remote_identity_hashTff7b72: Te6edf3contactTb4b4b4.Te6edf3remote_identity_hashTb4b4b4,
Te6edf3lxmf_addressTff7b72: Te6edf3contactTb4b4b4.Te6edf3lxmf_address Tff7b72|| Ta5d6ff""Tb4b4b4,
Te6edf3lxst_addressTff7b72: Te6edf3contactTb4b4b4.Te6edf3lxst_address Tff7b72|| Ta5d6ff""Tb4b4b4,
Te6edf3preferred_ringtone_idTff7b72: Te6edf3contactTb4b4b4.Te6edf3preferred_ringtone_idTb4b4b4,
Te6edf3custom_imageTff7b72: Te6edf3contactTb4b4b4.Te6edf3custom_imageTb4b4b4,
Tb4b4b4}Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3isContactModalOpen Tff7b72= Tff7b72trueTb4b4b4;
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3saveContactTb4b4b4(Te6edf3contactTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3contactTb4b4b4.Te6edf3name Tff7b72|| Tff7b72!Te6edf3contactTb4b4b4.Te6edf3remote_identity_hashTb4b4b4) Tb4b4b4{
Te6edf3ToastUtilsTb4b4b4.Te6edf3errorTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"call.name_and_hash_required"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72returnTb4b4b4;
Tb4b4b4}
Tff7b72try Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3contactTb4b4b4.Te6edf3idTb4b4b4) Tb4b4b4{
T8b949e// if editing and image was cleared, let backend know
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3editingContact Tff7b72&& Tff7b72thisTb4b4b4.Te6edf3editingContactTb4b4b4.Te6edf3custom_image Tff7b72&& Tff7b72!Te6edf3contactTb4b4b4.Te6edf3custom_imageTb4b4b4) Tb4b4b4{
Te6edf3contactTb4b4b4.Te6edf3clear_image Tff7b72= Tff7b72trueTb4b4b4;
Tb4b4b4}
Tff7b72await Tffa657windowTb4b4b4.Te6edf3axiosTb4b4b4.Te6edf3patchTb4b4b4(Ta5d6ff`Ta5d6ff/api/v1/telephone/contacts/Tffd700${Te6edf3contactTb4b4b4.Te6edf3idTffd700}Ta5d6ff`Tb4b4b4, Te6edf3contactTb4b4b4)Tb4b4b4;
Te6edf3ToastUtilsTb4b4b4.Te6edf3successTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"call.contact_updated"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72else Tb4b4b4{
Tff7b72await Tffa657windowTb4b4b4.Te6edf3axiosTb4b4b4.Te6edf3postTb4b4b4(Ta5d6ff"/api/v1/telephone/contacts"Tb4b4b4, Te6edf3contactTb4b4b4)Tb4b4b4;
Te6edf3ToastUtilsTb4b4b4.Te6edf3successTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"call.contact_added"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72thisTb4b4b4.Te6edf3isContactModalOpen Tff7b72= Tff7b72falseTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3getContactsTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Te6edf3ToastUtilsTb4b4b4.Te6edf3errorTb4b4b4(Te6edf3eTb4b4b4.Te6edf3responseTff7b72?Tb4b4b4.Te6edf3dataTff7b72?Tb4b4b4.Te6edf3message Tff7b72|| Ta5d6ff"Failed to save contact"Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3deleteContactTb4b4b4(Te6edf3contactIdTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3confirmTb4b4b4(Ta5d6ff"Are you sure you want to delete this contact?"Tb4b4b4)Tb4b4b4) Tff7b72returnTb4b4b4;
Tff7b72try Tb4b4b4{
Tff7b72await Tffa657windowTb4b4b4.Te6edf3axiosTb4b4b4.Tff7b72deleteTb4b4b4(Ta5d6ff`Ta5d6ff/api/v1/telephone/contacts/Tffd700${Te6edf3contactIdTffd700}Ta5d6ff`Tb4b4b4)Tb4b4b4;
Te6edf3ToastUtilsTb4b4b4.Te6edf3successTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"call.contact_deleted"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3getContactsTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4{
Te6edf3ToastUtilsTb4b4b4.Te6edf3errorTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"call.failed_to_delete_contact"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Te6edf3onContactImageChangeTb4b4b4(Te6edf3eventTb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3file Tff7b72= Te6edf3eventTb4b4b4.Te6edf3targetTb4b4b4.Te6edf3filesTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3fileTb4b4b4) Tff7b72returnTb4b4b4;

Tff7b72new Te6edf3CompressorTb4b4b4(Te6edf3fileTb4b4b4, Tb4b4b4{
Te6edf3maxWidthTff7b72: T79c0ff256Tb4b4b4,
Te6edf3maxHeightTff7b72: T79c0ff256Tb4b4b4,
Te6edf3qualityTff7b72: T79c0ff0.7Tb4b4b4,
Te6edf3mimeTypeTff7b72: Ta5d6ff"image/webp"Tb4b4b4,
Te6edf3successTff7b72: Tb4b4b4(Te6edf3resultTb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3reader Tff7b72= Tff7b72new Te6edf3FileReaderTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3readerTb4b4b4.Te6edf3onload Tff7b72= Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3contactFormTb4b4b4.Te6edf3custom_image Tff7b72= Te6edf3eTb4b4b4.Te6edf3targetTb4b4b4.Te6edf3resultTb4b4b4;
Tb4b4b4}Tb4b4b4;
Te6edf3readerTb4b4b4.Te6edf3readAsDataURLTb4b4b4(Te6edf3resultTb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3errorTff7b72: Tb4b4b4(Te6edf3errTb4b4b4) Tb4b4b4=> Tb4b4b4{
Te6edf3ToastUtilsTb4b4b4.Te6edf3errorTb4b4b4(Te6edf3errTb4b4b4.Te6edf3messageTb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3eventTb4b4b4.Te6edf3targetTb4b4b4.Te6edf3value Tff7b72= Ta5d6ff""Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3copyHashTb4b4b4(Te6edf3hashTb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72await Te6edf3navigatorTb4b4b4.Te6edf3clipboardTb4b4b4.Te6edf3writeTextTb4b4b4(Te6edf3hashTb4b4b4)Tb4b4b4;
Te6edf3ToastUtilsTb4b4b4.Te6edf3successTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"call.hash_copied"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Te6edf3consoleTb4b4b4.Te6edf3errorTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4;
Te6edf3ToastUtilsTb4b4b4.Te6edf3errorTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"call.failed_to_copy_hash"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3generateGreetingTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3isGeneratingGreeting Tff7b72= Tff7b72trueTb4b4b4;
Tff7b72try Tb4b4b4{
Tff7b72await Tffa657windowTb4b4b4.Te6edf3axiosTb4b4b4.Te6edf3postTb4b4b4(Ta5d6ff"/api/v1/telephone/voicemail/generate-greeting"Tb4b4b4)Tb4b4b4;
Te6edf3ToastUtilsTb4b4b4.Te6edf3successTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"call.greeting_generated_successfully"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72await Tff7b72thisTb4b4b4.Te6edf3getVoicemailStatusTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Te6edf3ToastUtilsTb4b4b4.Te6edf3errorTb4b4b4(Te6edf3eTb4b4b4.Te6edf3responseTff7b72?Tb4b4b4.Te6edf3dataTff7b72?Tb4b4b4.Te6edf3message Tff7b72|| Ta5d6ff"Failed to generate greeting"Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72finally Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3isGeneratingGreeting Tff7b72= Tff7b72falseTb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3uploadGreetingTb4b4b4(Te6edf3eventTb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3file Tff7b72= Te6edf3eventTb4b4b4.Te6edf3targetTb4b4b4.Te6edf3filesTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3fileTb4b4b4) Tff7b72returnTb4b4b4;

Tff7b72thisTb4b4b4.Te6edf3isUploadingGreeting Tff7b72= Tff7b72trueTb4b4b4;
Tff7b72const Te6edf3formData Tff7b72= Tff7b72new Te6edf3FormDataTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3formDataTb4b4b4.Te6edf3appendTb4b4b4(Ta5d6ff"file"Tb4b4b4, Te6edf3fileTb4b4b4)Tb4b4b4;

Tff7b72try Tb4b4b4{
Tff7b72await Tffa657windowTb4b4b4.Te6edf3axiosTb4b4b4.Te6edf3postTb4b4b4(Ta5d6ff"/api/v1/telephone/voicemail/greeting/upload"Tb4b4b4, Te6edf3formDataTb4b4b4, Tb4b4b4{
Te6edf3headersTff7b72: Tb4b4b4{
Ta5d6ff"Content-Type"Tff7b72: Ta5d6ff"multipart/form-data"Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3ToastUtilsTb4b4b4.Te6edf3successTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"call.greeting_uploaded_successfully"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72await Tff7b72thisTb4b4b4.Te6edf3getVoicemailStatusTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Te6edf3ToastUtilsTb4b4b4.Te6edf3errorTb4b4b4(Te6edf3eTb4b4b4.Te6edf3responseTff7b72?Tb4b4b4.Te6edf3dataTff7b72?Tb4b4b4.Te6edf3message Tff7b72|| Ta5d6ff"Failed to upload greeting"Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72finally Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3isUploadingGreeting Tff7b72= Tff7b72falseTb4b4b4;
Te6edf3eventTb4b4b4.Te6edf3targetTb4b4b4.Te6edf3value Tff7b72= Ta5d6ff""Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3deleteGreetingTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3confirmTb4b4b4(Ta5d6ff"Are you sure you want to delete your custom greeting?"Tb4b4b4)Tb4b4b4) Tff7b72returnTb4b4b4;

Tff7b72try Tb4b4b4{
Tff7b72await Tffa657windowTb4b4b4.Te6edf3axiosTb4b4b4.Tff7b72deleteTb4b4b4(Ta5d6ff"/api/v1/telephone/voicemail/greeting"Tb4b4b4)Tb4b4b4;
Te6edf3ToastUtilsTb4b4b4.Te6edf3successTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"call.greeting_deleted"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72await Tff7b72thisTb4b4b4.Te6edf3getVoicemailStatusTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4{
Te6edf3ToastUtilsTb4b4b4.Te6edf3errorTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"call.failed_to_delete_greeting"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3startRecordingGreetingMicTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72await Tffa657windowTb4b4b4.Te6edf3axiosTb4b4b4.Te6edf3postTb4b4b4(Ta5d6ff"/api/v1/telephone/voicemail/greeting/record/start"Tb4b4b4)Tb4b4b4;
Tff7b72await Tff7b72thisTb4b4b4.Te6edf3getVoicemailStatusTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4{
Te6edf3ToastUtilsTb4b4b4.Te6edf3errorTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"call.failed_to_start_recording_greeting"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3stopRecordingGreetingMicTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72await Tffa657windowTb4b4b4.Te6edf3axiosTb4b4b4.Te6edf3postTb4b4b4(Ta5d6ff"/api/v1/telephone/voicemail/greeting/record/stop"Tb4b4b4)Tb4b4b4;
Tff7b72await Tff7b72thisTb4b4b4.Te6edf3getVoicemailStatusTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3ToastUtilsTb4b4b4.Te6edf3successTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"call.greeting_recorded_from_mic"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4{
Te6edf3ToastUtilsTb4b4b4.Te6edf3errorTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"call.failed_to_stop_recording_greeting"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3playVoicemailTb4b4b4(Te6edf3voicemailTb4b4b4) Tb4b4b4{
T8b949e// This is now handled by AudioWaveformPlayer, but we keep it for backward compatibility or direct calls
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3playingVoicemailId Tff7b72=== Te6edf3voicemailTb4b4b4.Te6edf3idTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3audioPlayerTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3audioPlayerTb4b4b4.Te6edf3pauseTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72thisTb4b4b4.Te6edf3playingVoicemailId Tff7b72= Tff7b72nullTb4b4b4;
Tff7b72returnTb4b4b4;
Tb4b4b4}

Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3audioPlayerTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3audioPlayerTb4b4b4.Te6edf3pauseTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}

Tff7b72thisTb4b4b4.Te6edf3playingVoicemailId Tff7b72= Te6edf3voicemailTb4b4b4.Te6edf3idTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3audioPlayer Tff7b72= Tff7b72new Te6edf3AudioTb4b4b4(Ta5d6ff`Ta5d6ff/api/v1/telephone/voicemails/Tffd700${Te6edf3voicemailTb4b4b4.Te6edf3idTffd700}Ta5d6ff/audioTa5d6ff`Tb4b4b4)Tb4b4b4;

Tff7b72thisTb4b4b4.Te6edf3audioPlayerTb4b4b4.Te6edf3addEventListenerTb4b4b4(Ta5d6ff"error"Tb4b4b4, Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4=> Tb4b4b4{
Te6edf3consoleTb4b4b4.Te6edf3errorTb4b4b4(Ta5d6ff"Audio player error:"Tb4b4b4, Te6edf3eTb4b4b4)Tb4b4b4;
Te6edf3ToastUtilsTb4b4b4.Te6edf3errorTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"call.failed_to_play_voicemail"Tb4b4b4) Tff7b72|| Ta5d6ff"Failed to load voicemail audio"Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3playingVoicemailId Tff7b72= Tff7b72nullTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3audioPlayer Tff7b72= Tff7b72nullTb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;

Tff7b72thisTb4b4b4.Te6edf3audioPlayerTb4b4b4.Te6edf3onended Tff7b72= Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3playingVoicemailId Tff7b72= Tff7b72nullTb4b4b4;
Tb4b4b4}Tb4b4b4;

Tff7b72try Tb4b4b4{
Tff7b72await Tff7b72thisTb4b4b4.Te6edf3audioPlayerTb4b4b4.Te6edf3playTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Te6edf3consoleTb4b4b4.Te6edf3errorTb4b4b4(Ta5d6ff"Audio play failed:"Tb4b4b4, Te6edf3eTb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3playingVoicemailId Tff7b72= Tff7b72nullTb4b4b4;
Tb4b4b4}

Tff7b72thisTb4b4b4.Te6edf3markVoicemailAsReadTb4b4b4(Te6edf3voicemailTb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3markVoicemailAsReadTb4b4b4(Te6edf3voicemailTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3voicemailTb4b4b4.Te6edf3is_readTb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72await Tffa657windowTb4b4b4.Te6edf3axiosTb4b4b4.Te6edf3postTb4b4b4(Ta5d6ff`Ta5d6ff/api/v1/telephone/voicemails/Tffd700${Te6edf3voicemailTb4b4b4.Te6edf3idTffd700}Ta5d6ff/readTa5d6ff`Tb4b4b4)Tb4b4b4;
Te6edf3voicemailTb4b4b4.Te6edf3is_read Tff7b72= T79c0ff1Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3unreadVoicemailsCount Tff7b72= Tffa657MathTb4b4b4.Te6edf3maxTb4b4b4(T79c0ff0Tb4b4b4, Tff7b72thisTb4b4b4.Te6edf3unreadVoicemailsCount Tff7b72- T79c0ff1Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Te6edf3consoleTb4b4b4.Te6edf3errorTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Te6edf3playLatestVoicemailTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3voicemailsTb4b4b4.Te6edf3length Tff7b72> T79c0ff0Tb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3playVoicemailTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3voicemailsTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3deleteVoicemailTb4b4b4(Te6edf3voicemailIdTb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72await Tffa657windowTb4b4b4.Te6edf3axiosTb4b4b4.Tff7b72deleteTb4b4b4(Ta5d6ff`Ta5d6ff/api/v1/telephone/voicemails/Tffd700${Te6edf3voicemailIdTffd700}Ta5d6ff`Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3getVoicemailsTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3ToastUtilsTb4b4b4.Te6edf3successTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"call.voicemail_deleted"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4{
Te6edf3ToastUtilsTb4b4b4.Te6edf3errorTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"call.failed_to_delete_voicemail"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3getRecordingsTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72const Te6edf3response Tff7b72= Tff7b72await Tffa657windowTb4b4b4.Te6edf3axiosTb4b4b4.Te6edf3getTb4b4b4(Ta5d6ff"/api/v1/telephone/recordings"Tb4b4b4, Tb4b4b4{
Te6edf3paramsTff7b72: Tb4b4b4{ Te6edf3searchTff7b72: Tff7b72thisTb4b4b4.Te6edf3recordingSearch Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3recordings Tff7b72= Te6edf3responseTb4b4b4.Te6edf3dataTb4b4b4.Te6edf3recordings Tff7b72|| Tb4b4b4[Tb4b4b4]Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Te6edf3consoleTb4b4b4.Te6edf3errorTb4b4b4(Ta5d6ff"Failed to get recordings:"Tb4b4b4, Te6edf3eTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Te6edf3onRecordingSearchInputTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3searchDebounceTimeoutTb4b4b4) Te6edf3clearTimeoutTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3searchDebounceTimeoutTb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3searchDebounceTimeout Tff7b72= Te6edf3setTimeoutTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3getRecordingsTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4, T79c0ff500Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3playRecordingTb4b4b4(Te6edf3recordingTb4b4b4, Te6edf3sideTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3playingRecordingId Tff7b72=== Te6edf3recordingTb4b4b4.Te6edf3id Tff7b72&& Tff7b72thisTb4b4b4.Te6edf3playingSide Tff7b72=== Te6edf3sideTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3audioPlayerTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3audioPlayerTb4b4b4.Te6edf3pauseTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72thisTb4b4b4.Te6edf3playingRecordingId Tff7b72= Tff7b72nullTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3playingSide Tff7b72= Tff7b72nullTb4b4b4;
Tff7b72returnTb4b4b4;
Tb4b4b4}

Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3audioPlayerTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3audioPlayerTb4b4b4.Te6edf3pauseTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}

Tff7b72thisTb4b4b4.Te6edf3playingRecordingId Tff7b72= Te6edf3recordingTb4b4b4.Te6edf3idTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3playingSide Tff7b72= Te6edf3sideTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3audioPlayer Tff7b72= Tff7b72new Te6edf3AudioTb4b4b4(Ta5d6ff`Ta5d6ff/api/v1/telephone/recordings/Tffd700${Te6edf3recordingTb4b4b4.Te6edf3idTffd700}Ta5d6ff/audio/Tffd700${Te6edf3sideTffd700}Ta5d6ff`Tb4b4b4)Tb4b4b4;

Tff7b72thisTb4b4b4.Te6edf3audioPlayerTb4b4b4.Te6edf3onended Tff7b72= Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3playingRecordingId Tff7b72= Tff7b72nullTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3playingSide Tff7b72= Tff7b72nullTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3audioPlayer Tff7b72= Tff7b72nullTb4b4b4;
Tb4b4b4}Tb4b4b4;

Tff7b72try Tb4b4b4{
Tff7b72await Tff7b72thisTb4b4b4.Te6edf3audioPlayerTb4b4b4.Te6edf3playTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Te6edf3consoleTb4b4b4.Te6edf3errorTb4b4b4(Ta5d6ff"Failed to play recording:"Tb4b4b4, Te6edf3eTb4b4b4)Tb4b4b4;
Te6edf3ToastUtilsTb4b4b4.Te6edf3errorTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"call.failed_to_load_recording"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3playingRecordingId Tff7b72= Tff7b72nullTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3playingSide Tff7b72= Tff7b72nullTb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3deleteRecordingTb4b4b4(Te6edf3recordingIdTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3confirmTb4b4b4(Ta5d6ff"Are you sure you want to delete this recording?"Tb4b4b4)Tb4b4b4) Tff7b72returnTb4b4b4;
Tff7b72try Tb4b4b4{
Tff7b72await Tffa657windowTb4b4b4.Te6edf3axiosTb4b4b4.Tff7b72deleteTb4b4b4(Ta5d6ff`Ta5d6ff/api/v1/telephone/recordings/Tffd700${Te6edf3recordingIdTffd700}Ta5d6ff`Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3getRecordingsTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3ToastUtilsTb4b4b4.Te6edf3successTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"call.recording_deleted"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4{
Te6edf3ToastUtilsTb4b4b4.Te6edf3errorTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"call.failed_to_delete_recording"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3playGreetingTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3isPlayingGreetingTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3audioPlayerTb4b4b4.Te6edf3pauseTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3isPlayingGreeting Tff7b72= Tff7b72falseTb4b4b4;
Tff7b72returnTb4b4b4;
Tb4b4b4}

Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3audioPlayerTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3audioPlayerTb4b4b4.Te6edf3pauseTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}

Tff7b72thisTb4b4b4.Te6edf3isPlayingGreeting Tff7b72= Tff7b72trueTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3audioPlayer Tff7b72= Tff7b72new Te6edf3AudioTb4b4b4(Ta5d6ff"/api/v1/telephone/voicemail/greeting/audio"Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3audioPlayerTb4b4b4.Te6edf3playTb4b4b4(Tb4b4b4)Tb4b4b4.Tff7b72catchTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Te6edf3ToastUtilsTb4b4b4.Te6edf3errorTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"call.no_greeting_audio_found"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3isPlayingGreeting Tff7b72= Tff7b72falseTb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3audioPlayerTb4b4b4.Te6edf3onended Tff7b72= Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3isPlayingGreeting Tff7b72= Tff7b72falseTb4b4b4;
Tb4b4b4}Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3callTb4b4b4(Te6edf3identityHashTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3identityHashTb4b4b4) Tb4b4b4{
Te6edf3ToastUtilsTb4b4b4.Te6edf3errorTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"call.enter_identity_hash_to_call_error"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72returnTb4b4b4;
Tb4b4b4}

Tff7b72let Te6edf3hashToCall Tff7b72= Te6edf3identityHashTb4b4b4.Te6edf3trimTb4b4b4(Tb4b4b4)Tb4b4b4;
T8b949e// Accept lxmf:// URIs or pasted text; extract first 64-char hex
Tff7b72const Te6edf3hexMatch Tff7b72= Te6edf3hashToCallTb4b4b4.Te6edf3matchTb4b4b4(Ta5d6ff/[0-9a-fA-F]{64}/Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3hexMatchTb4b4b4) Tb4b4b4{
Te6edf3hashToCall Tff7b72= Te6edf3hexMatchTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4;
Tb4b4b4}
Te6edf3hashToCall Tff7b72= Te6edf3hashToCallTb4b4b4.Te6edf3toLowerCaseTb4b4b4(Tb4b4b4)Tb4b4b4;

T8b949e// Try to resolve name from contacts
Tff7b72const Te6edf3contact Tff7b72= Tff7b72thisTb4b4b4.Te6edf3contactsTb4b4b4.Te6edf3findTb4b4b4(Tb4b4b4(Te6edf3cTb4b4b4) Tb4b4b4=> Te6edf3cTb4b4b4.Te6edf3nameTb4b4b4.Te6edf3toLowerCaseTb4b4b4(Tb4b4b4) Tff7b72=== Te6edf3hashToCallTb4b4b4.Te6edf3toLowerCaseTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3contactTb4b4b4) Tb4b4b4{
Te6edf3hashToCall Tff7b72= Te6edf3contactTb4b4b4.Te6edf3remote_identity_hashTb4b4b4;
Tb4b4b4}

T8b949e// Provide immediate feedback
Tff7b72thisTb4b4b4.Te6edf3destinationHash Tff7b72= Te6edf3hashToCallTb4b4b4;
Tff7b72const Te6edf3targetContact Tff7b72= Tff7b72thisTb4b4b4.Te6edf3contactsTb4b4b4.Te6edf3findTb4b4b4(Tb4b4b4(Te6edf3cTb4b4b4) Tb4b4b4=> Te6edf3cTb4b4b4.Te6edf3remote_identity_hash Tff7b72=== Te6edf3hashToCallTb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3initiationTargetHash Tff7b72= Te6edf3hashToCallTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3initiationTargetName Tff7b72= Te6edf3targetContact Tff7b72? Te6edf3targetContactTb4b4b4.Te6edf3name Tff7b72: Tff7b72nullTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3activeTab Tff7b72= Ta5d6ff"phone"Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3initiationStatus Tff7b72= Ta5d6ff"Initiating..."Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3isCallEnded Tff7b72= Tff7b72falseTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3wasDeclined Tff7b72= Tff7b72falseTb4b4b4;

Tff7b72try Tb4b4b4{
Tff7b72await Tffa657windowTb4b4b4.Te6edf3axiosTb4b4b4.Te6edf3getTb4b4b4(Ta5d6ff`Ta5d6ff/api/v1/telephone/call/Tffd700${Te6edf3hashToCallTffd700}Ta5d6ff`Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3initiationStatus Tff7b72= Tff7b72nullTb4b4b4;
Te6edf3ToastUtilsTb4b4b4.Te6edf3errorTb4b4b4(Te6edf3eTb4b4b4.Te6edf3responseTff7b72?Tb4b4b4.Te6edf3dataTff7b72?Tb4b4b4.Te6edf3message Tff7b72|| Ta5d6ff"Failed to initiate call"Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Te6edf3handleCallInputUpTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3newCallSuggestionsTb4b4b4.Te6edf3length Tff7b72> T79c0ff0Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3selectedSuggestionIndex Tff7b72> T79c0ff0Tb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3selectedSuggestionIndexTff7b72--Tb4b4b4;
Tb4b4b4} Tff7b72else Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3selectedSuggestionIndex Tff7b72= Tff7b72thisTb4b4b4.Te6edf3newCallSuggestionsTb4b4b4.Te6edf3length Tff7b72- T79c0ff1Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Te6edf3handleCallInputDownTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3newCallSuggestionsTb4b4b4.Te6edf3length Tff7b72> T79c0ff0Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3selectedSuggestionIndex Tff7b72< Tff7b72thisTb4b4b4.Te6edf3newCallSuggestionsTb4b4b4.Te6edf3length Tff7b72- T79c0ff1Tb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3selectedSuggestionIndexTff7b72++Tb4b4b4;
Tb4b4b4} Tff7b72else Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3selectedSuggestionIndex Tff7b72= T79c0ff0Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Te6edf3handleCallInputEnterTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3selectedSuggestionIndex Tff7b72>= T79c0ff0 Tff7b72&& Tff7b72thisTb4b4b4.Te6edf3selectedSuggestionIndex Tff7b72< Tff7b72thisTb4b4b4.Te6edf3newCallSuggestionsTb4b4b4.Te6edf3lengthTb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3suggestion Tff7b72= Tff7b72thisTb4b4b4.Te6edf3newCallSuggestionsTb4b4b4[Tff7b72thisTb4b4b4.Te6edf3selectedSuggestionIndexTb4b4b4]Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3selectSuggestionTb4b4b4(Te6edf3suggestionTb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72else Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3callTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3destinationHashTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Te6edf3selectSuggestionTb4b4b4(Te6edf3suggestionTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3destinationHash Tff7b72= Te6edf3suggestionTb4b4b4.Te6edf3hashTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3isCallInputFocused Tff7b72= Tff7b72falseTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3selectedSuggestionIndex Tff7b72= Tff7b72-T79c0ff1Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3callTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3destinationHashTb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3onCallInputBlurTb4b4b4(Tb4b4b4) Tb4b4b4{
T8b949e// Delay blur to allow mousedown on suggestions
Te6edf3setTimeoutTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3isCallInputFocused Tff7b72= Tff7b72falseTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3selectedSuggestionIndex Tff7b72= Tff7b72-T79c0ff1Tb4b4b4;
Tb4b4b4}Tb4b4b4, T79c0ff200Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3answerCallTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72await Tffa657windowTb4b4b4.Te6edf3axiosTb4b4b4.Te6edf3getTb4b4b4(Ta5d6ff"/api/v1/telephone/answer"Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4{
Te6edf3ToastUtilsTb4b4b4.Te6edf3errorTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"call.failed_to_answer_call"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3hangupCallTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3activeCall Tff7b72&& Tff7b72thisTb4b4b4.Te6edf3activeCallTb4b4b4.Te6edf3is_incoming Tff7b72&& Tff7b72thisTb4b4b4.Te6edf3activeCallTb4b4b4.Te6edf3status Tff7b72=== T79c0ff4Tb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3wasDeclined Tff7b72= Tff7b72trueTb4b4b4;
Tb4b4b4}
Tff7b72await Tffa657windowTb4b4b4.Te6edf3axiosTb4b4b4.Te6edf3getTb4b4b4(Ta5d6ff"/api/v1/telephone/hangup"Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4{
Te6edf3ToastUtilsTb4b4b4.Te6edf3errorTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"call.failed_to_hangup_call"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3sendToVoicemailTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72await Tffa657windowTb4b4b4.Te6edf3axiosTb4b4b4.Te6edf3getTb4b4b4(Ta5d6ff"/api/v1/telephone/send-to-voicemail"Tb4b4b4)Tb4b4b4;
Te6edf3ToastUtilsTb4b4b4.Te6edf3successTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"call.call_sent_to_voicemail"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4{
Te6edf3ToastUtilsTb4b4b4.Te6edf3errorTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"call.failed_to_send_to_voicemail"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3switchAudioProfileTb4b4b4(Te6edf3audioProfileIdTb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72await Tffa657windowTb4b4b4.Te6edf3axiosTb4b4b4.Te6edf3getTb4b4b4(Ta5d6ff`Ta5d6ff/api/v1/telephone/switch-audio-profile/Tffd700${Te6edf3audioProfileIdTffd700}Ta5d6ff`Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4{
Te6edf3ToastUtilsTb4b4b4.Te6edf3errorTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"call.failed_to_switch_audio_profile"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3toggleMicrophoneTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72const Te6edf3isCurrentlyMuted Tff7b72= Tff7b72thisTb4b4b4.Te6edf3localMicMutedTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3isMicMuting Tff7b72= Tff7b72trueTb4b4b4;

T8b949e// Optimistic update
Tff7b72thisTb4b4b4.Te6edf3localMicMuted Tff7b72= Tff7b72!Te6edf3isCurrentlyMutedTb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3activeCallTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3activeCallTb4b4b4.Te6edf3is_mic_muted Tff7b72= Tff7b72thisTb4b4b4.Te6edf3localMicMutedTb4b4b4;
Tb4b4b4}

Tff7b72const Te6edf3endpoint Tff7b72= Te6edf3isCurrentlyMuted
Tff7b72? Ta5d6ff"/api/v1/telephone/unmute-transmit"
Tff7b72: Ta5d6ff"/api/v1/telephone/mute-transmit"Tb4b4b4;
Tff7b72await Tffa657windowTb4b4b4.Te6edf3axiosTb4b4b4.Te6edf3getTb4b4b4(Te6edf3endpointTb4b4b4)Tb4b4b4;

T8b949e// clear muting state after a short delay to allow backend to catch up
Te6edf3setTimeoutTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3isMicMuting Tff7b72= Tff7b72falseTb4b4b4;
Tb4b4b4}Tb4b4b4, T79c0ff500Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3isMicMuting Tff7b72= Tff7b72falseTb4b4b4;
T8b949e// Revert on error
Tff7b72thisTb4b4b4.Te6edf3localMicMuted Tff7b72= Tff7b72!Tff7b72thisTb4b4b4.Te6edf3localMicMutedTb4b4b4;
Te6edf3ToastUtilsTb4b4b4.Te6edf3errorTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"call.failed_to_toggle_microphone"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3toggleSpeakerTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72const Te6edf3isCurrentlyMuted Tff7b72= Tff7b72thisTb4b4b4.Te6edf3localSpeakerMutedTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3isSpeakerMuting Tff7b72= Tff7b72trueTb4b4b4;

T8b949e// Optimistic update
Tff7b72thisTb4b4b4.Te6edf3localSpeakerMuted Tff7b72= Tff7b72!Te6edf3isCurrentlyMutedTb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3activeCallTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3activeCallTb4b4b4.Te6edf3is_speaker_muted Tff7b72= Tff7b72thisTb4b4b4.Te6edf3localSpeakerMutedTb4b4b4;
Tb4b4b4}

Tff7b72const Te6edf3endpoint Tff7b72= Te6edf3isCurrentlyMuted
Tff7b72? Ta5d6ff"/api/v1/telephone/unmute-receive"
Tff7b72: Ta5d6ff"/api/v1/telephone/mute-receive"Tb4b4b4;
Tff7b72await Tffa657windowTb4b4b4.Te6edf3axiosTb4b4b4.Te6edf3getTb4b4b4(Te6edf3endpointTb4b4b4)Tb4b4b4;

T8b949e// clear muting state after a short delay to allow backend to catch up
Te6edf3setTimeoutTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3isSpeakerMuting Tff7b72= Tff7b72falseTb4b4b4;
Tb4b4b4}Tb4b4b4, T79c0ff500Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3isSpeakerMuting Tff7b72= Tff7b72falseTb4b4b4;
T8b949e// Revert on error
Tff7b72thisTb4b4b4.Te6edf3localSpeakerMuted Tff7b72= Tff7b72!Tff7b72thisTb4b4b4.Te6edf3localSpeakerMutedTb4b4b4;
Te6edf3ToastUtilsTb4b4b4.Te6edf3errorTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"call.failed_to_toggle_speaker"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4;
Tb4b4b4<Tb4b4b4/Tff7b72scriptTb4b4b4>


──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────